Skip to content

Commit 876fafc

Browse files
authored
jsx-in-depth: улучшения
1 parent f6af914 commit 876fafc

File tree

1 file changed

+36
-36
lines changed

1 file changed

+36
-36
lines changed

content/docs/jsx-in-depth.md

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,15 @@ redirect_from:
1313
- "docs/jsx-in-depth-ko-KR.html"
1414
---
1515

16-
JSX является синтаксическим сахаром для функции `React.createElement(component, props, ...children)`. Этот JSX-код:
16+
JSX — синтаксический сахар для функции `React.createElement(component, props, ...children)`. Этот JSX-код:
1717

1818
```js
1919
<MyButton color="blue" shadowSize={2}>
2020
Нажми меня
2121
</MyButton>
2222
```
2323

24-
компилируется в:
24+
Скомпилируется в:
2525

2626
```js
2727
React.createElement(
@@ -37,7 +37,7 @@ React.createElement(
3737
<div className="sidebar" />
3838
```
3939

40-
компилируется в:
40+
Скомпилируется в:
4141

4242
```js
4343
React.createElement(
@@ -75,14 +75,14 @@ function WarningButton() {
7575

7676
### Использование записи через точку {#using-dot-notation-for-jsx-type}
7777

78-
Вы также можете ссылаться на React-компонент, используя запись через точку. Это удобно, если у вас есть модуль, который экспортирует много React компонентов. К примеру, если `MyComponents.DatePicker` является компонентом, то вы можете обратиться к нему напрямую, используя запись через точку:
78+
Вы также можете ссылаться на React-компонент, используя запись через точку. Это удобно, если у вас есть модуль, который экспортирует много React-компонентов. К примеру, если `MyComponents.DatePicker` является компонентом, то вы можете обратиться к нему напрямую, используя запись через точку:
7979

8080
```js{10}
8181
import React from 'react';
8282
8383
const MyComponents = {
8484
DatePicker: function DatePicker(props) {
85-
return <div>Imagine a {props.color} datepicker here.</div>;
85+
return <div>Представьте, что здесь цвет {props.color} виджета выбора даты.</div>;
8686
}
8787
}
8888
@@ -93,7 +93,7 @@ function BlueDatePicker() {
9393

9494
### Названия типов пользовательских компонентов должны начинаться с большой буквы {#user-defined-components-must-be-capitalized}
9595

96-
Если название типа элемента начинается с маленькой буквы, он ссылается на встроенный компонент, к примеру `<div>` или `<span>`, что в результате приведёт к тому, что в `React.createElement` будет передана строка `'div'` или `'span'`. Типы, начинающиеся с заглавной буквы, такие как `<Foo />`, компилируются в `React.createElement(Foo)` и соответствуют компоненту, который был объявлен или импортирован в вашем JavaScript файле.
96+
Если название типа элемента начинается с маленькой буквы, он ссылается на встроенный компонент, к примеру `<div>` или `<span>`, что в результате приведёт к тому, что в `React.createElement` будет передана строка `'div'` или `'span'`. Типы, начинающиеся с заглавной буквы, такие как `<Foo />`, компилируются в `React.createElement(Foo)` и соответствуют компоненту, который был объявлен или импортирован в вашем JavaScript-файле.
9797

9898
Мы рекомендуем называть компоненты с заглавной буквы. Если у вас есть компонент, название которого начинается с маленькой буквы, то перед тем как использовать его в JSX, присвойте его в переменную, которая имеет название с заглавной буквы.
9999

@@ -105,13 +105,13 @@ import React from 'react';
105105
// Неправильно! Это компонент и он должен быть записан с заглавной буквы:
106106
function hello(props) {
107107
// Правильно! Использование <div> разрешено, так как это валидный HTML-тег:
108-
return <div>Hello {props.toWhat}</div>;
108+
return <div>Привет, {props.toWhat}</div>;
109109
}
110110
111111
function HelloWorld() {
112112
// Неправильно! React думает, что <hello /> - это HTML-тег,
113113
// потому что он записан с маленькой буквы:
114-
return <hello toWhat="World" />;
114+
return <hello toWhat="Мир" />;
115115
}
116116
```
117117

@@ -123,13 +123,13 @@ import React from 'react';
123123
// Правильно! Это компонент и он должен быть записан с заглавной буквы:
124124
function Hello(props) {
125125
// Правильно! Использование <div> разрешено, так как это валидный HTML-тег:
126-
return <div>Hello {props.toWhat}</div>;
126+
return <div>Привет, {props.toWhat}</div>;
127127
}
128128
129129
function HelloWorld() {
130130
// Правильно! React знает, что <Hello /> это компонент,
131131
// потому что он написан с заглавной буквы.
132-
return <Hello toWhat="World" />;
132+
return <Hello toWhat="Мир" />;
133133
}
134134
```
135135

@@ -230,19 +230,19 @@ function NumberDescriber(props) {
230230
<MyTextBox autocomplete={true} />
231231
```
232232

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.
234234

235235
### Атрибуты расширения {#spread-attributes}
236236

237-
Если у вас уже есть пропсы внутри объекта `props` и вы хотите передать их в JSX, вы можете использовать оператор расширения `...` («spread operator»). Эти два компонента эквивалентны:
237+
Если у вас уже есть пропсы внутри объекта `props` и вы хотите передать их в JSX, вы можете использовать оператор расширения `...`. Эти два компонента эквивалентны:
238238

239239
```js{7}
240240
function App1() {
241-
return <Greeting firstName="Ben" lastName="Hector" />;
241+
return <Greeting firstName="Иван" lastName="Иванов" />;
242242
}
243243
244244
function App2() {
245-
const props = {firstName: 'Ben', lastName: 'Hector'};
245+
const props = {firstName: 'Иван', lastName: 'Иванов'};
246246
return <Greeting {...props} />;
247247
}
248248
```
@@ -260,7 +260,7 @@ const App = () => {
260260
return (
261261
<div>
262262
<Button kind="primary" onClick={() => console.log("clicked!")}>
263-
Hello World!
263+
Привет, мир!
264264
</Button>
265265
</div>
266266
);
@@ -284,29 +284,29 @@ const App = () => {
284284
<MyComponent>Привет, мир!</MyComponent>
285285
```
286286

287-
Это корректный JSX-код, в котором значение `props.children` в `MyComponent` будет строкой `"Привет, мир!"`. HTML в таком коде «разэкранируется», поэтому JSX можно писать также как HTML:
287+
Это корректный JSX-код, в котором значение `props.children` в `MyComponent` будет строкой `"Привет, мир!"`. HTML не экранируется, поэтому JSX можно писать также как HTML:
288288

289289
```html
290290
<div>This is valid HTML &amp; JSX at the same time.</div>
291291
```
292292

293-
JSX удаляет пустые строки и пробелы в начале и в конце строки. Новая строка, примыкающая к тегу будет удалена. Новые строки между строковых литералов сжимаются в один пробел. Следующие три примера кода рендерят одинаковый результат:
293+
JSX удаляет пустые строки и пробелы в начале и конце строки. Новые строки, примыкающие к тегу будут удалены. Новые строки между строковых литералов сжимаются в один пробел. Следующие три примера кода рендерят одинаковый результат:
294294

295295
```js
296-
<div>Hello World</div>
296+
<div>Привет, мир</div>
297297

298298
<div>
299-
Hello World
299+
Привет, мир
300300
</div>
301301

302302
<div>
303-
Hello
304-
World
303+
Привет,
304+
мир
305305
</div>
306306

307307
<div>
308308

309-
Hello World
309+
Привет, мир
310310
</div>
311311
```
312312

@@ -325,10 +325,10 @@ JSX удаляет пустые строки и пробелы в начале
325325

326326
```html
327327
<div>
328-
Here is a list:
328+
Ниже представлен список:
329329
<ul>
330-
<li>Item 1</li>
331-
<li>Item 2</li>
330+
<li>Элемент 1</li>
331+
<li>Элемент 2</li>
332332
</ul>
333333
</div>
334334
```
@@ -339,10 +339,10 @@ JSX удаляет пустые строки и пробелы в начале
339339
render() {
340340
// Не нужно оборачивать список элементов в дополнительный элемент!
341341
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>,
346346
];
347347
}
348348
```
@@ -365,7 +365,7 @@ function Item(props) {
365365
}
366366
367367
function TodoList() {
368-
const todos = ['finish doc', 'submit pr', 'nag dan to review'];
368+
const todos = ['закончить документацию', 'отправить пулреквест', 'снова напомнить Дэну про ревью'];
369369
return (
370370
<ul>
371371
{todos.map((message) => <Item key={message} message={message} />)}
@@ -374,17 +374,17 @@ function TodoList() {
374374
}
375375
```
376376

377-
JavaScript-выражения могут быть использованы вместе с другими типами дочерних компонентов. Это может работать как альтернатива шаблонным строкам:
377+
JavaScript-выражения могут быть использованы вместе с другими типами дочерних компонентов. Они могут рассматриваться как альтернатива шаблонным строкам:
378378

379379
```js{2}
380380
function Hello(props) {
381-
return <div>Hello {props.addressee}!</div>;
381+
return <div>Привет, {props.addressee}!</div>;
382382
}
383383
```
384384

385385
### Функции как дочерние компоненты {#functions-as-children}
386386

387-
Обычно JavaScript-выражения, вставленные в JSX, будут приведены к строке, React-элементу или списку из этих вещей. Тем не менее, `props.children` работает также как любой другой проп, так как в него можно передавать любые типы данных, а не только те, которые React знает как рендерить. К примеру, если у вас есть пользовательский компонент, вы могли бы передать функцию обратного вызова в `props.children`:
387+
Обычно JavaScript-выражения, вставленные в JSX, будут приведены к строке, React-элементу или списку из всего этого. Тем не менее, `props.children` работает так же, как и любой другой проп, поэтому в него можно передавать любые типы данных, а не только те, которые React знает как рендерить. К примеру, если у вас есть пользовательский компонент, можно было бы передать колбэк в `props.children`:
388388

389389
```js{4,13}
390390
// Вызывает колбэк numTimes раз для создания повторяющего компонента
@@ -399,15 +399,15 @@ function Repeat(props) {
399399
function ListOfTenThings() {
400400
return (
401401
<Repeat numTimes={10}>
402-
{(index) => <div key={index}>This is item {index} in the list</div>}
402+
{(index) => <div key={index}>Это элемент списка с ключом {index}</div>}
403403
</Repeat>
404404
);
405405
}
406406
```
407407

408408
Дочерние компоненты, передаваемые пользовательскому компоненту, могут быть чем угодно с тем условием, что компонент преобразует их во что-то, что React сможет понять и отрендерить. Следующий пример редко встречается, но им можно воспользоваться, если необходимо расширить возможности JSX.
409409

410-
### Логические значения, null, и undefined игнорируются {#booleans-null-and-undefined-are-ignored}
410+
### Логические значения, null и undefined игнорируются {#booleans-null-and-undefined-are-ignored}
411411

412412
Значения `false`, `null`, `undefined` и `true` -- валидные дочерние компоненты. Просто они не рендерятся. Эти JSX-выражения будут рендерить одно и то же:
413413

@@ -458,6 +458,6 @@ function ListOfTenThings() {
458458

459459
```js{2}
460460
<div>
461-
My JavaScript variable is {String(myVariable)}.
461+
Моя переменная JavaScript - {String(myVariable)}.
462462
</div>
463463
```

0 commit comments

Comments
 (0)