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
## Использование рендер-пропа для сквозных задач {#use-render-props-for-cross-cutting-concerns}
22
22
23
-
Компоненты это основа повторного использования кода в React. Однако бывает неочевидно, как сделать, чтобы одни компоненты разделяли своё инкапсулированное состояние или поведение с другими компонентами, заинтересованными в таком же состоянии или поведении.
23
+
Компоненты -- это основа повторного использования кода в React. Однако бывает неочевидно, как сделать, чтобы одни компоненты разделяли своё инкапсулированное состояние или поведение с другими компонентами, заинтересованными в таком же состоянии или поведении.
24
24
25
25
Например, следующий компонент отслеживает положение мыши в приложении:
26
26
@@ -42,8 +42,8 @@ class MouseTracker extends React.Component {
{/* ...но как можно отрендерить что-то, кроме <p>? */}
80
-
<p>The current mouse position is ({this.state.x}, {this.state.y})</p>
80
+
<p>Текущее положение курсора мыши: ({this.state.x}, {this.state.y})</p>
81
81
</div>
82
82
);
83
83
}
@@ -87,7 +87,7 @@ class MouseTracker extends React.Component {
87
87
render() {
88
88
return (
89
89
<div>
90
-
<h1>Move the mouse around!</h1>
90
+
<h1>Перемещайте курсор мыши!</h1>
91
91
<Mouse />
92
92
</div>
93
93
);
@@ -145,7 +145,7 @@ class MouseTracker extends React.Component {
145
145
render() {
146
146
return (
147
147
<div>
148
-
<h1>Move the mouse around!</h1>
148
+
<h1>Перемещайте курсор мыши!</h1>
149
149
<MouseWithCat />
150
150
</div>
151
151
);
@@ -199,7 +199,7 @@ class MouseTracker extends React.Component {
199
199
render() {
200
200
return (
201
201
<div>
202
-
<h1>Move the mouse around!</h1>
202
+
<h1>Перемещайте курсор мыши!</h1>
203
203
<Mouse render={mouse=> (
204
204
<Cat mouse={mouse} />
205
205
)}/>
@@ -239,11 +239,11 @@ function withMouse(Component) {
239
239
240
240
Важно запомнить, что из названия паттерна «рендер-проп» вовсе не следует, что для его использования *вы должны обязательно называть проп `render`*. На самом деле, [*любой* проп, который используется компонентом и является функцией рендеринга, технически является и «рендер-пропом»](https://cdb.reacttraining.com/use-a-render-prop-50de598f11ce).
241
241
242
-
Несмотря на то, что в вышеприведенных примерах мы используем `render`, мы можем также легко использовать проп `children`!
242
+
Несмотря на то, что в вышеприведённых примерах мы используем `render`, мы можем также легко использовать проп `children`!
243
243
244
244
```js
245
245
<Mouse children={mouse=> (
246
-
<p>The mouse position is {mouse.x}, {mouse.y}</p>
246
+
<p>Текущее положение курсора мыши: {mouse.x}, {mouse.y}</p>
247
247
)}/>
248
248
```
249
249
@@ -252,7 +252,7 @@ function withMouse(Component) {
252
252
```js
253
253
<Mouse>
254
254
{mouse=> (
255
-
<p>The mouse position is {mouse.x}, {mouse.y}</p>
255
+
<p>Текущее положение курсора мыши: {mouse.x}, {mouse.y}</p>
256
256
)}
257
257
</Mouse>
258
258
```
@@ -272,7 +272,7 @@ Mouse.propTypes = {
272
272
273
273
### Будьте осторожны при использовании рендер-проп вместе с React.PureComponent {#be-careful-when-using-render-props-with-reactpurecomponent}
274
274
275
-
Использование рендер-пропа может свести на нет преимущество, которое дает[`React.PureComponent`](/docs/react-api.html#reactpurecomponent), если вы создаете функцию внутри метода `render`. Это связано с тем, что поверхностное сравнение пропсов всегда будет возвращать `false` для новых пропсов и каждый `render` будет генерировать новое значение для рендер-пропа.
275
+
Использование рендер-пропа может свести на нет преимущество, которое даёт[`React.PureComponent`](/docs/react-api.html#reactpurecomponent), если вы создаете функцию внутри метода `render`. Это связано с тем, что поверхностное сравнение пропсов всегда будет возвращать `false` для новых пропсов и каждый `render` будет генерировать новое значение для рендер-пропа.
276
276
277
277
Например, в продолжение нашего `<Mouse>` компонента упомянутого выше, если `Mouse` наследуется от `React.PureComponent` вместо `React.Component`, наш пример будет выглядеть следующим образом:
278
278
@@ -285,7 +285,7 @@ class MouseTracker extends React.Component {
285
285
render() {
286
286
return (
287
287
<div>
288
-
<h1>Move the mouse around!</h1>
288
+
<h1>Перемещайте курсор мыши!</h1>
289
289
290
290
{/*
291
291
Это плохо! Значение рендер-пропа будет
@@ -315,7 +315,7 @@ class MouseTracker extends React.Component {
0 commit comments