You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: content/ru/guide/v11/web-components.md
+4-111Lines changed: 4 additions & 111 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,12 +5,9 @@ description: Как использовать веб-компоненты с Prea
5
5
6
6
# Веб-компоненты
7
7
8
-
Малый размер Preact и его ориентированность на стандарты делают его отличным выбором для создания веб-компонентов.
8
+
Веб-компоненты — это набор различных технологий, которые позволяют создавать переиспользуемые, инкапсулированные пользовательские HTML-элементы, полностью независимые от фреймворков. Примерами веб-компонентов являются элементы вроде `<material-card>` или `<tab-bar>`.
9
9
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-приложениях.
14
11
15
12
Preact и веб-компоненты дополняют друг друга: веб-компоненты предоставляют набор низкоуровневых примитивов для расширения браузера, а Preact предоставляет высокоуровневую модель компонентов, которая может опираться на эти примитивы.
16
13
@@ -56,7 +53,7 @@ function Foo() {
56
53
}
57
54
```
58
55
59
-
> **Примечание:** Preact не делает предположений относительно схем именования и не будет пытаться преобразовывать имена, в JSX или иным образом, в свойства DOM. Если пользовательский элемент имеет имя свойства `someProperty`, то его нужно устанавливать с точно таким же регистром и написанием (`someProperty=...`). Использование `someproperty=...` или `some-property=...` не сработает.
56
+
> **Примечание:** Preact не делает никаких предположений относительно схем именования и не пытается принудительно приводить имена, в JSX или где-либо ещё, к свойствам DOM. Если у пользовательского элемента есть свойство с именем `someProperty`, то его нужно устанавливать именно с такой же капитализацией и написанием (`someProperty=...`). `someproperty=...` или `some-property=...`работать не будут.
60
57
61
58
При рендеринге статического HTML с использованием `preact-render-to-string` («SSR») сложные значения свойств, такие как объект выше, не сериализуются автоматически. Они применяются после гидратации статического HTML на клиенте.
Любой компонент Preact может быть превращен в веб-компонент с помощью [preact-custom-element](https://github.com/preactjs/preact-custom-element), очень тонкой обёртки, которая соответствует спецификации Custom Elements v1.
99
-
100
-
```jsx
101
-
importregisterfrom'preact-custom-element';
102
-
103
-
constGreeting= ({ name ='World' }) =><p>Привет, {name}!</p>;
> Примечание: Согласно [Спецификации Пользовательских элементов](http://w3c.github.io/webcomponents/spec/custom/#prod-potentialcustomelementname), имя тега должно содержать дефис (`-`).
112
-
113
-
Используйте новое имя тега в HTML, ключи атрибутов и значения будут переданы как пропсы:
114
-
115
-
```html
116
-
<x-greetingname="Вася Пупкин"></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
-
importregisterfrom'preact-custom-element';
138
-
139
-
// <x-greeting name="Bo"></x-greeting>
140
-
classGreetingextendsComponent {
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
-
functionFullName({ 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.
0 commit comments