Skip to content

Commit c221df0

Browse files
docs: translate writing-markup-with-jsx.md to Русский
1 parent 2958f53 commit c221df0

1 file changed

Lines changed: 50 additions & 50 deletions

File tree

src/content/learn/writing-markup-with-jsx.md

Lines changed: 50 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,72 @@
11
---
2-
title: Writing Markup with JSX
2+
title: Написание разметки с помощью JSX
33
---
44

55
<Intro>
66

7-
*JSX* is a syntax extension for JavaScript that lets you write HTML-like markup inside a JavaScript file. Although there are other ways to write components, most React developers prefer the conciseness of JSX, and most codebases use it.
7+
*JSX* — это синтаксическое расширение для JavaScript, которое позволяет писать разметку в стиле HTML прямо в файлах JavaScript. Хотя существуют и другие способы написания компонентов, большинство разработчиков React предпочитают краткость JSX, и большинство кодовых баз его используют.
88

99
</Intro>
1010

1111
<YouWillLearn>
1212

13-
* Why React mixes markup with rendering logic
14-
* How JSX is different from HTML
15-
* How to display information with JSX
13+
* Почему React смешивает разметку с логикой рендеринга
14+
* Чем JSX отличается от HTML
15+
* Как отображать информацию с помощью JSX
1616

1717
</YouWillLearn>
1818

19-
## JSX: Putting markup into JavaScript {/*jsx-putting-markup-into-javascript*/}
19+
## JSX: Встраивание разметки в JavaScript {/*jsx-putting-markup-into-javascript*/}
2020

21-
The Web has been built on HTML, CSS, and JavaScript. For many years, web developers kept content in HTML, design in CSS, and logic in JavaScript—often in separate files! Content was marked up inside HTML while the page's logic lived separately in JavaScript:
21+
Веб построен на HTML, CSS и JavaScript. Долгие годы веб-разработчики хранили контент в HTML, дизайн — в CSS, а логику — в JavaScript, часто в отдельных файлах! Контент размечался внутри HTML, в то время как логика страницы жила отдельно в JavaScript:
2222

2323
<DiagramGroup>
2424

25-
<Diagram name="writing_jsx_html" height={237} width={325} alt="HTML markup with purple background and a div with two child tags: p and form. ">
25+
<Diagram name="writing_jsx_html" height={237} width={325} alt="HTML-разметка с фиолетовым фоном и div с двумя дочерними тегами: p и form. ">
2626

2727
HTML
2828

2929
</Diagram>
3030

31-
<Diagram name="writing_jsx_js" height={237} width={325} alt="Three JavaScript handlers with yellow background: onSubmit, onLogin, and onClick.">
31+
<Diagram name="writing_jsx_js" height={237} width={325} alt="Три обработчика JavaScript с желтым фоном: onSubmit, onLogin и onClick.">
3232

3333
JavaScript
3434

3535
</Diagram>
3636

3737
</DiagramGroup>
3838

39-
But as the Web became more interactive, logic increasingly determined content. JavaScript was in charge of the HTML! This is why **in React, rendering logic and markup live together in the same place—components.**
39+
Но по мере того, как веб становился более интерактивным, логика всё чаще определяла контент. JavaScript отвечал за HTML! Именно поэтому **в React логика рендеринга и разметка находятся вместе в одном месте — компонентах.**
4040

4141
<DiagramGroup>
4242

43-
<Diagram name="writing_jsx_sidebar" height={330} width={325} alt="React component with HTML and JavaScript from previous examples mixed. Function name is Sidebar which calls the function isLoggedIn, highlighted in yellow. Nested inside the function highlighted in purple is the p tag from before, and a Form tag referencing the component shown in the next diagram.">
43+
<Diagram name="writing_jsx_sidebar" height={330} width={325} alt="React-компонент со смешанным HTML и JavaScript из предыдущих примеров. Имя функции - Sidebar, которая вызывает функцию isLoggedIn, выделенную желтым цветом. Внутри функции, выделенной фиолетовым, находится тег p из предыдущего примера и тег Form, ссылающийся на компонент, показанный на следующем рисунке.">
4444

45-
`Sidebar.js` React component
45+
React-компонент `Sidebar.js`
4646

4747
</Diagram>
4848

49-
<Diagram name="writing_jsx_form" height={330} width={325} alt="React component with HTML and JavaScript from previous examples mixed. Function name is Form containing two handlers onClick and onSubmit highlighted in yellow. Following the handlers is HTML highlighted in purple. The HTML contains a form element with a nested input element, each with an onClick prop.">
49+
<Diagram name="writing_jsx_form" height={330} width={325} alt="React-компонент со смешанным HTML и JavaScript из предыдущих примеров. Имя функции - Form, содержащее два обработчика onClick и onSubmit, выделенных желтым цветом. После обработчиков идет HTML, выделенный фиолетовым цветом. HTML содержит элемент form с вложенным элементом input, каждый из которых имеет проп onClick.">
5050

51-
`Form.js` React component
51+
React-компонент `Form.js`
5252

5353
</Diagram>
5454

5555
</DiagramGroup>
5656

57-
Keeping a button's rendering logic and markup together ensures that they stay in sync with each other on every edit. Conversely, details that are unrelated, such as the button's markup and a sidebar's markup, are isolated from each other, making it safer to change either of them on their own.
57+
Сохранение логики рендеринга кнопки и её разметки вместе гарантирует, что они будут синхронизированы при каждом изменении. И наоборот, несвязанные детали, такие как разметка кнопки и разметка боковой панели, изолированы друг от друга, что делает их изменение по отдельности более безопасным.
5858

59-
Each React component is a JavaScript function that may contain some markup that React renders into the browser. React components use a syntax extension called JSX to represent that markup. JSX looks a lot like HTML, but it is a bit stricter and can display dynamic information. The best way to understand this is to convert some HTML markup to JSX markup.
59+
Каждый React-компонент — это JavaScript-функция, которая может содержать разметку, которую React отображает в браузере. React-компоненты используют синтаксическое расширение под названием JSX для представления этой разметки. JSX очень похож на HTML, но он немного строже и может отображать динамическую информацию. Лучший способ понять это — преобразовать некоторую HTML-разметку в JSX-разметку.
6060

6161
<Note>
6262

63-
JSX and React are two separate things. They're often used together, but you *can* [use them independently](https://reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html#whats-a-jsx-transform) of each other. JSX is a syntax extension, while React is a JavaScript library.
63+
JSX и React — это две разные вещи. Они часто используются вместе, но вы *можете* [использовать их независимо](https://reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html#whats-a-jsx-transform) друг от друга. JSX — это синтаксическое расширение, а React — это JavaScript-библиотека.
6464

6565
</Note>
6666

67-
## Converting HTML to JSX {/*converting-html-to-jsx*/}
67+
## Преобразование HTML в JSX {/*converting-html-to-jsx*/}
6868

69-
Suppose that you have some (perfectly valid) HTML:
69+
Предположим, у вас есть валидный HTML:
7070

7171
```html
7272
<h1>Hedy Lamarr's Todos</h1>
@@ -82,7 +82,7 @@ Suppose that you have some (perfectly valid) HTML:
8282
</ul>
8383
```
8484

85-
And you want to put it into your component:
85+
И вы хотите вставить его в свой компонент:
8686

8787
```js
8888
export default function TodoList() {
@@ -92,7 +92,7 @@ export default function TodoList() {
9292
}
9393
```
9494

95-
If you copy and paste it as is, it will not work:
95+
Если вы скопируете и вставите его как есть, это не сработает:
9696

9797

9898
<Sandpack>
@@ -122,21 +122,21 @@ img { height: 90px }
122122
123123
</Sandpack>
124124
125-
This is because JSX is stricter and has a few more rules than HTML! If you read the error messages above, they'll guide you to fix the markup, or you can follow the guide below.
125+
Это связано с тем, что JSX строже и имеет несколько больше правил, чем HTML! Если вы прочитаете сообщения об ошибках выше, они помогут вам исправить разметку, или вы можете следовать приведенному ниже руководству.
126126
127127
<Note>
128128
129-
Most of the time, React's on-screen error messages will help you find where the problem is. Give them a read if you get stuck!
129+
В большинстве случаев сообщения об ошибках React на экране помогут вам найти проблему. Прочитайте их, если застряли!
130130
131131
</Note>
132132
133-
## The Rules of JSX {/*the-rules-of-jsx*/}
133+
## Правила JSX {/*the-rules-of-jsx*/}
134134
135-
### 1. Return a single root element {/*1-return-a-single-root-element*/}
135+
### 1. Возвращайте один корневой элемент {/*1-return-a-single-root-element*/}
136136
137-
To return multiple elements from a component, **wrap them with a single parent tag.**
137+
Чтобы вернуть несколько элементов из компонента, **оберните их в один родительский тег.**
138138
139-
For example, you can use a `<div>`:
139+
Например, вы можете использовать `<div>`:
140140
141141
```js {1,11}
142142
<div>
@@ -153,7 +153,7 @@ For example, you can use a `<div>`:
153153
```
154154
155155
156-
If you don't want to add an extra `<div>` to your markup, you can write `<>` and `</>` instead:
156+
Если вы не хотите добавлять лишний `<div>` в свою разметку, вы можете использовать вместо него `<>` и `</>`:
157157
158158
```js {1,11}
159159
<>
@@ -169,21 +169,21 @@ If you don't want to add an extra `<div>` to your markup, you can write `<>` and
169169
</>
170170
```
171171
172-
This empty tag is called a *[Fragment.](/reference/react/Fragment)* Fragments let you group things without leaving any trace in the browser HTML tree.
172+
Этот пустой тег называется *[Фрагментом.](/reference/react/Fragment)* Фрагменты позволяют группировать элементы, не оставляя следов в DOM-дереве браузера.
173173
174174
<DeepDive>
175175
176-
#### Why do multiple JSX tags need to be wrapped? {/*why-do-multiple-jsx-tags-need-to-be-wrapped*/}
176+
#### Почему несколько JSX-тегов нужно оборачивать? {/*why-do-multiple-jsx-tags-need-to-be-wrapped*/}
177177
178-
JSX looks like HTML, but under the hood it is transformed into plain JavaScript objects. You can't return two objects from a function without wrapping them into an array. This explains why you also can't return two JSX tags without wrapping them into another tag or a Fragment.
178+
JSX выглядит как HTML, но под капотом он преобразуется в обычные объекты JavaScript. Вы не можете вернуть два объекта из функции, не обернув их в массив. Это объясняет, почему вы также не можете вернуть два JSX-тега без оборачивания их в другой тег или Фрагмент.
179179
180180
</DeepDive>
181181
182-
### 2. Close all the tags {/*2-close-all-the-tags*/}
182+
### 2. Закрывайте все теги {/*2-close-all-the-tags*/}
183183
184-
JSX requires tags to be explicitly closed: self-closing tags like `<img>` must become `<img />`, and wrapping tags like `<li>oranges` must be written as `<li>oranges</li>`.
184+
JSX требует явного закрытия тегов: теги с самозакрытием, такие как `<img>`, должны стать `<img />`, а оборачивающие теги, такие как `<li>oranges`, должны быть написаны как `<li>oranges</li>`.
185185
186-
This is how Hedy Lamarr's image and list items look closed:
186+
Вот как выглядят закрытые изображение и элементы списка Хеди Ламарр:
187187
188188
```js {2-6,8-10}
189189
<>
@@ -200,11 +200,11 @@ This is how Hedy Lamarr's image and list items look closed:
200200
</>
201201
```
202202
203-
### 3. camelCase <s>all</s> most of the things! {/*3-camelcase-salls-most-of-the-things*/}
203+
### 3. camelCase <s>все</s> почти всё! {/*3-camelcase-salls-most-of-the-things*/}
204204
205-
JSX turns into JavaScript and attributes written in JSX become keys of JavaScript objects. In your own components, you will often want to read those attributes into variables. But JavaScript has limitations on variable names. For example, their names can't contain dashes or be reserved words like `class`.
205+
JSX преобразуется в JavaScript, а атрибуты, написанные в JSX, становятся ключами объектов JavaScript. В ваших собственных компонентах вы часто захотите считывать эти атрибуты в переменные. Но у JavaScript есть ограничения на имена переменных. Например, их имена не могут содержать дефисы или быть зарезервированными словами, такими как `class`.
206206
207-
This is why, in React, many HTML and SVG attributes are written in camelCase. For example, instead of `stroke-width` you use `strokeWidth`. Since `class` is a reserved word, in React you write `className` instead, named after the [corresponding DOM property](https://developer.mozilla.org/en-US/docs/Web/API/Element/className):
207+
Именно поэтому в React многие атрибуты HTML и SVG пишутся в camelCase. Например, вместо `stroke-width` вы используете `strokeWidth`. Поскольку `class` является зарезервированным словом, в React вместо него используется `className`, названный в честь [соответствующего свойства DOM](https://developer.mozilla.org/en-US/docs/Web/API/Element/className):
208208
209209
```js {4}
210210
<img
@@ -214,19 +214,19 @@ This is why, in React, many HTML and SVG attributes are written in camelCase. Fo
214214
/>
215215
```
216216
217-
You can [find all these attributes in the list of DOM component props.](/reference/react-dom/components/common) If you get one wrong, don't worry—React will print a message with a possible correction to the [browser console.](https://developer.mozilla.org/docs/Tools/Browser_Console)
217+
Вы можете [найти все эти атрибуты в списке DOM-пропсов компонентов.](/reference/react-dom/components/common) Если вы ошибетесь, не волнуйтесь — React выведет сообщение с возможной коррекцией в [консоль браузера.](https://developer.mozilla.org/docs/Tools/Browser_Console)
218218
219219
<Pitfall>
220220
221-
For historical reasons, [`aria-*`](https://developer.mozilla.org/docs/Web/Accessibility/ARIA) and [`data-*`](https://developer.mozilla.org/docs/Learn/HTML/Howto/Use_data_attributes) attributes are written as in HTML with dashes.
221+
По историческим причинам атрибуты [`aria-*`](https://developer.mozilla.org/docs/Web/Accessibility/ARIA) и [`data-*`](https://developer.mozilla.org/docs/Learn/HTML/Howto/Use_data_attributes) пишутся как в HTML, с дефисами.
222222
223223
</Pitfall>
224224
225-
### Pro-tip: Use a JSX Converter {/*pro-tip-use-a-jsx-converter*/}
225+
### Профессиональный совет: Используйте конвертер JSX {/*pro-tip-use-a-jsx-converter*/}
226226
227-
Converting all these attributes in existing markup can be tedious! We recommend using a [converter](https://transform.tools/html-to-jsx) to translate your existing HTML and SVG to JSX. Converters are very useful in practice, but it's still worth understanding what is going on so that you can comfortably write JSX on your own.
227+
Преобразование всех этих атрибутов в существующей разметке может быть утомительным! Мы рекомендуем использовать [конвертер](https://transform.tools/html-to-jsx) для преобразования вашего существующего HTML и SVG в JSX. Конвертеры очень полезны на практике, но все же стоит понимать, что происходит, чтобы вы могли уверенно писать JSX самостоятельно.
228228
229-
Here is your final result:
229+
Вот ваш окончательный результат:
230230
231231
<Sandpack>
232232
@@ -258,21 +258,21 @@ img { height: 90px }
258258

259259
<Recap>
260260

261-
Now you know why JSX exists and how to use it in components:
261+
Теперь вы знаете, почему существует JSX и как его использовать в компонентах:
262262

263-
* React components group rendering logic together with markup because they are related.
264-
* JSX is similar to HTML, with a few differences. You can use a [converter](https://transform.tools/html-to-jsx) if you need to.
265-
* Error messages will often point you in the right direction to fixing your markup.
263+
* React-компоненты объединяют логику рендеринга с разметкой, потому что они связаны.
264+
* JSX похож на HTML, с некоторыми отличиями. Вы можете использовать [конвертер](https://transform.tools/html-to-jsx), если вам это нужно.
265+
* Сообщения об ошибках часто указывают правильное направление для исправления вашей разметки.
266266

267267
</Recap>
268268

269269

270270

271271
<Challenges>
272272

273-
#### Convert some HTML to JSX {/*convert-some-html-to-jsx*/}
273+
#### Преобразуйте HTML в JSX {/*convert-some-html-to-jsx*/}
274274

275-
This HTML was pasted into a component, but it's not valid JSX. Fix it:
275+
Этот HTML был вставлен в компонент, но это не валидный JSX. Исправьте его:
276276

277277
<Sandpack>
278278

@@ -308,7 +308,7 @@ export default function Bio() {
308308

309309
</Sandpack>
310310

311-
Whether to do it by hand or using the converter is up to you!
311+
Делать это вручную или с помощью конвертера — решать вам!
312312

313313
<Solution>
314314

@@ -350,4 +350,4 @@ export default function Bio() {
350350

351351
</Solution>
352352

353-
</Challenges>
353+
</Challenges>

0 commit comments

Comments
 (0)