Skip to content

Commit 94217f9

Browse files
committed
Update ru/guide/v11/web-components.md
1 parent 0436cfb commit 94217f9

File tree

1 file changed

+4
-111
lines changed

1 file changed

+4
-111
lines changed

content/ru/guide/v11/web-components.md

Lines changed: 4 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,9 @@ description: Как использовать веб-компоненты с Prea
55

66
# Веб-компоненты
77

8-
Малый размер Preact и его ориентированность на стандарты делают его отличным выбором для создания веб-компонентов.
8+
Веб-компоненты — это набор различных технологий, которые позволяют создавать переиспользуемые, инкапсулированные пользовательские HTML-элементы, полностью независимые от фреймворков. Примерами веб-компонентов являются элементы вроде `<material-card>` или `<tab-bar>`.
99

10-
Веб-компоненты — это набор стандартов, которые позволяют создавать новые типы HTML-элементов — пользовательские элементы, такие как `<material-card>` или `<tab-bar>`.
11-
Preact [полностью поддерживает эти стандарты](https://custom-elements-everywhere.com/#preact), позволяя бесшовное использование жизненного цикла пользовательских элементов, свойств и событий.
12-
13-
Preact предназначен для рендеринга как полных приложений, так и отдельных частей страницы, что делает его естественным выбором для создания веб-компонентов. Многие компании используют его для создания систем компонентов или дизайна, которые затем упаковываются в набор веб-компонентов, обеспечивая повторное использование в нескольких проектах и в других фреймворках.
10+
Как платформенный примитив, Preact [полностью поддерживает веб-компоненты](https://custom-elements-everywhere.com/#preact), позволяя без проблем использовать жизненные циклы пользовательских элементов, свойства и события в ваших Preact-приложениях.
1411

1512
Preact и веб-компоненты дополняют друг друга: веб-компоненты предоставляют набор низкоуровневых примитивов для расширения браузера, а Preact предоставляет высокоуровневую модель компонентов, которая может опираться на эти примитивы.
1613

@@ -56,7 +53,7 @@ function Foo() {
5653
}
5754
```
5855

59-
> **Примечание:** Preact не делает предположений относительно схем именования и не будет пытаться преобразовывать имена, в JSX или иным образом, в свойства DOM. Если пользовательский элемент имеет имя свойства `someProperty`, то его нужно устанавливать с точно таким же регистром и написанием (`someProperty=...`). Использование `someproperty=...` или `some-property=...` не сработает.
56+
> **Примечание:** Preact не делает никаких предположений относительно схем именования и не пытается принудительно приводить имена, в JSX или где-либо ещё, к свойствам DOM. Если у пользовательского элемента есть свойство с именем `someProperty`, то его нужно устанавливать именно с такой же капитализацией и написанием (`someProperty=...`). `someproperty=...` или `some-property=...` работать не будут.
6057
6158
При рендеринге статического HTML с использованием `preact-render-to-string` («SSR») сложные значения свойств, такие как объект выше, не сериализуются автоматически. Они применяются после гидратации статического HTML на клиенте.
6259

@@ -91,108 +88,4 @@ Preact нормализует регистр стандартных встрое
9188

9289
// Исправлено: прослушивается событие «tabchange» (строчные буквы).
9390
<tab-bar ontabchange={() => console.log('смена вкладки')} />
94-
```
95-
96-
## Создание веб-компонента
97-
98-
Любой компонент Preact может быть превращен в веб-компонент с помощью [preact-custom-element](https://github.com/preactjs/preact-custom-element), очень тонкой обёртки, которая соответствует спецификации Custom Elements v1.
99-
100-
```jsx
101-
import register from 'preact-custom-element';
102-
103-
const Greeting = ({ name = 'World' }) => <p>Привет, {name}!</p>;
104-
105-
register(Greeting, 'x-greeting', ['name'], { shadow: false });
106-
// ^ ^ ^ ^
107-
// | HTML-тег | использовать shadow-dom
108-
// Определение компонента Отслеживаемые атрибуты
109-
```
110-
111-
> Примечание: Согласно [Спецификации Пользовательских элементов](http://w3c.github.io/webcomponents/spec/custom/#prod-potentialcustomelementname), имя тега должно содержать дефис (`-`).
112-
113-
Используйте новое имя тега в HTML, ключи атрибутов и значения будут переданы как пропсы:
114-
115-
```html
116-
<x-greeting name="Вася Пупкин"></x-greeting>
117-
```
118-
119-
Вывод:
120-
121-
```html
122-
<p>Привет, Вася Пупкин!</p>
123-
```
124-
125-
### Отслеживаемые атрибуты
126-
127-
Веб-компоненты требуют явного перечисления имен атрибутов, которые вы хотите отслеживать, чтобы реагировать на изменения их значений. Они могут быть указаны через третий параметр, передаваемый функции `register()`:
128-
129-
```jsx
130-
// Прослушиваем изменения атрибута `name`
131-
register(Greeting, 'x-greeting', ['name']);
132-
```
133-
134-
Если вы опустите третий параметр для `register()`, список атрибутов для отслеживания может быть указан с использованием статического свойства `observedAttributes` на компоненте. Это также работает для имени Пользовательского элемента, которое может быть указано с использованием статического свойства `tagName`:
135-
136-
```jsx
137-
import register from 'preact-custom-element';
138-
139-
// <x-greeting name="Bo"></x-greeting>
140-
class Greeting extends Component {
141-
// Регистрируем как <x-greeting>:
142-
static tagName = 'x-greeting';
143-
144-
// Отслеживаем эти атрибуты:
145-
static observedAttributes = ['name'];
146-
147-
render({ name }) {
148-
return <p>Привет, {name}!</p>;
149-
}
150-
}
151-
register(Greeting);
152-
```
153-
154-
Если `observedAttributes` не указаны, они будут выведены из ключей `propTypes`, если присутствуют на компоненте:
155-
156-
```jsx
157-
// Другой вариант: используйте PropTypes:
158-
function FullName({ first, last }) {
159-
return (
160-
<span>
161-
{first} {last}
162-
</span>
163-
);
164-
}
165-
166-
FullName.propTypes = {
167-
first: Object, // вы можете использовать PropTypes, или это
168-
last: Object // трюк для определения не-типизированных пропсов.
169-
};
170-
171-
register(FullName, 'full-name');
172-
```
173-
174-
### Передача слотов как пропсов
175-
176-
Функция `register()` имеет четвертый параметр для передачи опций; в настоящее время поддерживается только опция `shadow`, которая прикрепляет дерево shadow DOM к указанному элементу. При включении это позволяет использовать именованные элементы `<slot>` для пересылки дочерних элементов пользовательского элемента к определённым местам в дереве shadow.
177-
178-
```jsx
179-
function TextSection({ heading, content }) {
180-
return (
181-
<div>
182-
<h1>{heading}</h1>
183-
<p>{content}</p>
184-
</div>
185-
);
186-
}
187-
188-
register(TextSection, 'text-section', [], { shadow: true });
189-
```
190-
191-
Использование:
192-
193-
```html
194-
<text-section>
195-
<span slot="heading">Приятный заголовок</span>
196-
<span slot="content">Шикарный контент</span>
197-
</text-section>
198-
```
91+
```

0 commit comments

Comments
 (0)