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/docs/jsx-in-depth.md
+36-36Lines changed: 36 additions & 36 deletions
Original file line number
Diff line number
Diff line change
@@ -13,15 +13,15 @@ redirect_from:
13
13
- "docs/jsx-in-depth-ko-KR.html"
14
14
---
15
15
16
-
JSX является синтаксическим сахаром для функции `React.createElement(component, props, ...children)`. Этот JSX-код:
16
+
JSX — синтаксический сахар для функции `React.createElement(component, props, ...children)`. Этот JSX-код:
17
17
18
18
```js
19
19
<MyButton color="blue" shadowSize={2}>
20
20
Нажми меня
21
21
</MyButton>
22
22
```
23
23
24
-
компилируется в:
24
+
Скомпилируется в:
25
25
26
26
```js
27
27
React.createElement(
@@ -37,7 +37,7 @@ React.createElement(
37
37
<div className="sidebar"/>
38
38
```
39
39
40
-
компилируется в:
40
+
Скомпилируется в:
41
41
42
42
```js
43
43
React.createElement(
@@ -75,14 +75,14 @@ function WarningButton() {
75
75
76
76
### Использование записи через точку {#using-dot-notation-for-jsx-type}
77
77
78
-
Вы также можете ссылаться на React-компонент, используя запись через точку. Это удобно, если у вас есть модуль, который экспортирует много Reactкомпонентов. К примеру, если `MyComponents.DatePicker` является компонентом, то вы можете обратиться к нему напрямую, используя запись через точку:
78
+
Вы также можете ссылаться на React-компонент, используя запись через точку. Это удобно, если у вас есть модуль, который экспортирует много React-компонентов. К примеру, если `MyComponents.DatePicker` является компонентом, то вы можете обратиться к нему напрямую, используя запись через точку:
79
79
80
80
```js{10}
81
81
import React from 'react';
82
82
83
83
const MyComponents = {
84
84
DatePicker: function DatePicker(props) {
85
-
return <div>Imagine a {props.color} datepicker here.</div>;
85
+
return <div>Представьте, что здесь цвет {props.color} виджета выбора даты.</div>;
86
86
}
87
87
}
88
88
@@ -93,7 +93,7 @@ function BlueDatePicker() {
93
93
94
94
### Названия типов пользовательских компонентов должны начинаться с большой буквы {#user-defined-components-must-be-capitalized}
95
95
96
-
Если название типа элемента начинается с маленькой буквы, он ссылается на встроенный компонент, к примеру `<div>` или `<span>`, что в результате приведёт к тому, что в `React.createElement` будет передана строка `'div'` или `'span'`. Типы, начинающиеся с заглавной буквы, такие как `<Foo />`, компилируются в `React.createElement(Foo)` и соответствуют компоненту, который был объявлен или импортирован в вашем JavaScriptфайле.
96
+
Если название типа элемента начинается с маленькой буквы, он ссылается на встроенный компонент, к примеру `<div>` или `<span>`, что в результате приведёт к тому, что в `React.createElement` будет передана строка `'div'` или `'span'`. Типы, начинающиеся с заглавной буквы, такие как `<Foo />`, компилируются в `React.createElement(Foo)` и соответствуют компоненту, который был объявлен или импортирован в вашем JavaScript-файле.
97
97
98
98
Мы рекомендуем называть компоненты с заглавной буквы. Если у вас есть компонент, название которого начинается с маленькой буквы, то перед тем как использовать его в JSX, присвойте его в переменную, которая имеет название с заглавной буквы.
99
99
@@ -105,13 +105,13 @@ import React from 'react';
105
105
// Неправильно! Это компонент и он должен быть записан с заглавной буквы:
106
106
function hello(props) {
107
107
// Правильно! Использование <div> разрешено, так как это валидный HTML-тег:
108
-
return <div>Hello {props.toWhat}</div>;
108
+
return <div>Привет, {props.toWhat}</div>;
109
109
}
110
110
111
111
function HelloWorld() {
112
112
// Неправильно! React думает, что <hello /> - это HTML-тег,
113
113
// потому что он записан с маленькой буквы:
114
-
return <hello toWhat="World" />;
114
+
return <hello toWhat="Мир" />;
115
115
}
116
116
```
117
117
@@ -123,13 +123,13 @@ import React from 'react';
123
123
// Правильно! Это компонент и он должен быть записан с заглавной буквы:
124
124
function Hello(props) {
125
125
// Правильно! Использование <div> разрешено, так как это валидный HTML-тег:
126
-
return <div>Hello {props.toWhat}</div>;
126
+
return <div>Привет, {props.toWhat}</div>;
127
127
}
128
128
129
129
function HelloWorld() {
130
130
// Правильно! React знает, что <Hello /> это компонент,
131
131
// потому что он написан с заглавной буквы.
132
-
return <Hello toWhat="World" />;
132
+
return <Hello toWhat="Мир" />;
133
133
}
134
134
```
135
135
@@ -230,19 +230,19 @@ function NumberDescriber(props) {
230
230
<MyTextBox autocomplete={true} />
231
231
```
232
232
233
-
В основном, мы не рекомендуем так делать, потому что это может быть воспринято как [ES6 object shorthand](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/Object_initializer#%D0%9D%D0%BE%D0%B2%D0%B0%D1%8F_%D0%BD%D0%BE%D1%82%D0%B0%D1%86%D0%B8%D1%8F_%D0%B2_ECMAScript_2015)`{foo}`, которое является сокращением для `{foo: foo}`, а не `{foo: true}`. Такое поведение существует для того, чтобы соответствовать поведению HTML.
233
+
В основном, мы не рекомендуем так делать, потому что это может быть воспринято как [сокращение имён свойств из ES6](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/Object_initializer#%D0%9D%D0%BE%D0%B2%D0%B0%D1%8F_%D0%BD%D0%BE%D1%82%D0%B0%D1%86%D0%B8%D1%8F_%D0%B2_ECMAScript_2015). Тогда, например, `{foo}` это короткая запись `{foo: foo}`, но никак не `{foo: true}`. Такое поведение существует для того, чтобы соответствовать поведению HTML.
234
234
235
235
### Атрибуты расширения {#spread-attributes}
236
236
237
-
Если у вас уже есть пропсы внутри объекта `props` и вы хотите передать их в JSX, вы можете использовать оператор расширения `...` («spread operator»). Эти два компонента эквивалентны:
237
+
Если у вас уже есть пропсы внутри объекта `props` и вы хотите передать их в JSX, вы можете использовать оператор расширения `...`. Эти два компонента эквивалентны:
Это корректный JSX-код, в котором значение `props.children` в `MyComponent` будет строкой `"Привет, мир!"`. HTML в таком коде «разэкранируется», поэтому JSX можно писать также как HTML:
287
+
Это корректный JSX-код, в котором значение `props.children` в `MyComponent` будет строкой `"Привет, мир!"`. HTML не экранируется, поэтому JSX можно писать также как HTML:
288
288
289
289
```html
290
290
<div>This is valid HTML & JSX at the same time.</div>
291
291
```
292
292
293
-
JSX удаляет пустые строки и пробелы в начале и в конце строки. Новая строка, примыкающая к тегу будет удалена. Новые строки между строковых литералов сжимаются в один пробел. Следующие три примера кода рендерят одинаковый результат:
293
+
JSX удаляет пустые строки и пробелы в начале и конце строки. Новые строки, примыкающие к тегу будут удалены. Новые строки между строковых литералов сжимаются в один пробел. Следующие три примера кода рендерят одинаковый результат:
294
294
295
295
```js
296
-
<div>Hello World</div>
296
+
<div>Привет, мир</div>
297
297
298
298
<div>
299
-
Hello World
299
+
Привет, мир
300
300
</div>
301
301
302
302
<div>
303
-
Hello
304
-
World
303
+
Привет,
304
+
мир
305
305
</div>
306
306
307
307
<div>
308
308
309
-
Hello World
309
+
Привет, мир
310
310
</div>
311
311
```
312
312
@@ -325,10 +325,10 @@ JSX удаляет пустые строки и пробелы в начале
325
325
326
326
```html
327
327
<div>
328
-
Here is a list:
328
+
Ниже представлен список:
329
329
<ul>
330
-
<li>Item 1</li>
331
-
<li>Item 2</li>
330
+
<li>Элемент 1</li>
331
+
<li>Элемент 2</li>
332
332
</ul>
333
333
</div>
334
334
```
@@ -339,10 +339,10 @@ JSX удаляет пустые строки и пробелы в начале
339
339
render() {
340
340
// Не нужно оборачивать список элементов в дополнительный элемент!
341
341
return [
342
-
// Не забудьте про keys :)
343
-
<li key="A">First item</li>,
344
-
<li key="B">Second item</li>,
345
-
<li key="C">Third item</li>,
342
+
// Не забудьте про ключи :)
343
+
<li key="A">Первый элемент</li>,
344
+
<li key="B">Второй элемент</li>,
345
+
<li key="C">Третий элемент</li>,
346
346
];
347
347
}
348
348
```
@@ -365,7 +365,7 @@ function Item(props) {
365
365
}
366
366
367
367
function TodoList() {
368
-
const todos = ['finish doc', 'submit pr', 'nag dan to review'];
368
+
const todos = ['закончить документацию', 'отправить пулреквест', 'снова напомнить Дэну про ревью'];
JavaScript-выражения могут быть использованы вместе с другими типами дочерних компонентов. Это может работать как альтернатива шаблонным строкам:
377
+
JavaScript-выражения могут быть использованы вместе с другими типами дочерних компонентов. Они могут рассматриваться как альтернатива шаблонным строкам:
378
378
379
379
```js{2}
380
380
function Hello(props) {
381
-
return <div>Hello {props.addressee}!</div>;
381
+
return <div>Привет, {props.addressee}!</div>;
382
382
}
383
383
```
384
384
385
385
### Функции как дочерние компоненты {#functions-as-children}
386
386
387
-
Обычно JavaScript-выражения, вставленные в JSX, будут приведены к строке, React-элементу или списку из этих вещей. Тем не менее, `props.children` работает также как любой другой проп, так как в него можно передавать любые типы данных, а не только те, которые React знает как рендерить. К примеру, если у вас есть пользовательский компонент, вы могли бы передать функцию обратного вызова в `props.children`:
387
+
Обычно JavaScript-выражения, вставленные в JSX, будут приведены к строке, React-элементу или списку из всего этого. Тем не менее, `props.children` работает так же, как и любой другой проп, поэтому в него можно передавать любые типы данных, а не только те, которые React знает как рендерить. К примеру, если у вас есть пользовательский компонент, можно было бы передать колбэк в `props.children`:
388
388
389
389
```js{4,13}
390
390
// Вызывает колбэк numTimes раз для создания повторяющего компонента
@@ -399,15 +399,15 @@ function Repeat(props) {
399
399
function ListOfTenThings() {
400
400
return (
401
401
<Repeat numTimes={10}>
402
-
{(index) => <div key={index}>This is item {index} in the list</div>}
402
+
{(index) => <div key={index}>Это элемент списка с ключом {index}</div>}
403
403
</Repeat>
404
404
);
405
405
}
406
406
```
407
407
408
408
Дочерние компоненты, передаваемые пользовательскому компоненту, могут быть чем угодно с тем условием, что компонент преобразует их во что-то, что React сможет понять и отрендерить. Следующий пример редко встречается, но им можно воспользоваться, если необходимо расширить возможности JSX.
409
409
410
-
### Логические значения, null, и undefined игнорируются {#booleans-null-and-undefined-are-ignored}
410
+
### Логические значения, null и undefined игнорируются {#booleans-null-and-undefined-are-ignored}
411
411
412
412
Значения `false`, `null`, `undefined` и `true` -- валидные дочерние компоненты. Просто они не рендерятся. Эти JSX-выражения будут рендерить одно и то же:
0 commit comments