From 2856cdf6757f6d7e5fc1580b4fda1d47c0045677 Mon Sep 17 00:00:00 2001 From: Daniil Patrikeev Date: Mon, 11 Feb 2019 19:02:58 +0300 Subject: [PATCH 1/7] handling events translation --- content/docs/handling-events.md | 52 ++++++++++++++++----------------- content/docs/nav.yml | 2 +- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/content/docs/handling-events.md b/content/docs/handling-events.md index a8d3a1f51..f2e86f675 100644 --- a/content/docs/handling-events.md +++ b/content/docs/handling-events.md @@ -1,6 +1,6 @@ --- id: handling-events -title: Handling Events +title: Обработка событий permalink: docs/handling-events.html prev: state-and-lifecycle.html next: conditional-rendering.html @@ -8,12 +8,12 @@ redirect_from: - "docs/events-ko-KR.html" --- -Handling events with React elements is very similar to handling events on DOM elements. There are some syntactic differences: +Обработка событий в React-элементах очень похожа на обработку событий в DOM-элементах. Но есть несколько синтаксических отличий: -* React events are named using camelCase, rather than lowercase. -* With JSX you pass a function as the event handler, rather than a string. +* События в React называются с помощью camelCase, вместо нижнего регистра. +* В JSX вы передаете функцию с помощью обработчика событий, вместо строки. -For example, the HTML: +Например, в HTML: ```html ``` -is slightly different in React: +В React немного иначе: ```js{1} ``` -Another difference is that you cannot return `false` to prevent default behavior in React. You must call `preventDefault` explicitly. For example, with plain HTML, to prevent the default link behavior of opening a new page, you can write: +Еще одно отличие, в React вы не можете отменить событие вернув `false`. Вы должны явно вызвать `preventDefault`. Например, в нативном HTML, чтобы отменить событие у ссылки, которая откроет новую страницу, вы можете написать: ```html @@ -37,7 +37,7 @@ Another difference is that you cannot return `false` to prevent default behavior ``` -In React, this could instead be: +В React это будет выглядеть так: ```js{2-5,8} function ActionLink() { @@ -54,11 +54,11 @@ function ActionLink() { } ``` -Here, `e` is a synthetic event. React defines these synthetic events according to the [W3C spec](https://www.w3.org/TR/DOM-Level-3-Events/), so you don't need to worry about cross-browser compatibility. See the [`SyntheticEvent`](/docs/events.html) reference guide to learn more. +Здесь `e` — это синтетическое событие. Не волнуйтесь о кроссбраузерности, React определяет синтетические события в соответствии со [спецификацией W3C](https://www.w3.org/TR/DOM-Level-3-Events/). Посмотрите руководство о [`SyntheticEvent`](/docs/events.html), чтобы узнать о них больше. -When using React you should generally not need to call `addEventListener` to add listeners to a DOM element after it is created. Instead, just provide a listener when the element is initially rendered. +Используя React, обычно, вам не нужно вызывать `addEventListener`, чтобы добавить обработчики в DOM-елемент после того как он был создан. Вместо этого, просто добавьте обработчик сразу после того, как он отрендерился. -When you define a component using an [ES6 class](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Classes), a common pattern is for an event handler to be a method on the class. For example, this `Toggle` component renders a button that lets the user toggle between "ON" and "OFF" states: +Когда вы определяете компонент, используя [ES6-класс](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Classes), есть общий паттерн, в котором обработчик события должен быть методом. Например, этот компонент `Toggle` рендерит кнопку, которая позволяет пользователю переключать состояния между "ON" и "OFF": ```js{6,7,10-14,18} class Toggle extends React.Component { @@ -66,7 +66,7 @@ class Toggle extends React.Component { super(props); this.state = {isToggleOn: true}; - // This binding is necessary to make `this` work in the callback + // Эта привязка обязательна, для работы `this` в колбэке. this.handleClick = this.handleClick.bind(this); } @@ -91,18 +91,18 @@ ReactDOM.render( ); ``` -[**Try it on CodePen**](http://codepen.io/gaearon/pen/xEmzGg?editors=0010) +[**Посмотреть на CodePen**](http://codepen.io/gaearon/pen/xEmzGg?editors=0010) -You have to be careful about the meaning of `this` in JSX callbacks. In JavaScript, class methods are not [bound](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Function/bind) by default. If you forget to bind `this.handleClick` and pass it to `onClick`, `this` will be `undefined` when the function is actually called. +Будьте внимательны со значением `this` в JSX-колбэках. В JavaScript, методы класса не [привязаны](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) по умолчанию. Если вы забудете привязать метод `this.handleClick` и передать его в `onClick`, при вызове функции `this` будет `undefined`. -This is not React-specific behavior; it is a part of [how functions work in JavaScript](https://www.smashingmagazine.com/2014/01/understanding-javascript-function-prototype-bind/). Generally, if you refer to a method without `()` after it, such as `onClick={this.handleClick}`, you should bind that method. +Дело не в работе React, это часть того, [как работают функции в JavaScript](https://www.smashingmagazine.com/2014/01/understanding-javascript-function-prototype-bind/). Обычно, если вы ссылаетесь на метод без `()` после него, например, `onClick={this.handleClick}`, этот метод нужно привязать. -If calling `bind` annoys you, there are two ways you can get around this. If you are using the experimental [public class fields syntax](https://babeljs.io/docs/plugins/transform-class-properties/), you can use class fields to correctly bind callbacks: +Если вам не по душе `bind`, существует 2 способа, как сделать это иначе. Если вы пользуетесь экспериментальным [синтаксисом инициализатора свойств](https://babeljs.io/docs/plugins/transform-class-properties/), вы можете использовать его, чтобы правильно привязать колбэки: ```js{2-6} class LoggingButton extends React.Component { - // This syntax ensures `this` is bound within handleClick. - // Warning: this is *experimental* syntax. + // Такой синтаксис гарантирует, что `this` привязан к handleClick. + // Предупреждение: экспериментальный синтаксис handleClick = () => { console.log('this is:', this); } @@ -117,9 +117,9 @@ class LoggingButton extends React.Component { } ``` -This syntax is enabled by default in [Create React App](https://github.com/facebookincubator/create-react-app). +Такой синтаксис доступен в [Create React App](https://github.com/facebookincubator/create-react-app) по умолчанию. -If you aren't using class fields syntax, you can use an [arrow function](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions) in the callback: +Если вы не пользуетесь инициализаторами свойств, вы можете попробовать [стрелочные функции](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Functions/Arrow_functions) в колбэке: ```js{7-9} class LoggingButton extends React.Component { @@ -128,7 +128,7 @@ class LoggingButton extends React.Component { } render() { - // This syntax ensures `this` is bound within handleClick + // Такой синтаксис гарантирует, что `this` привязан к handleClick. return ( ``` -The above two lines are equivalent, and use [arrow functions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions) and [`Function.prototype.bind`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Function/bind) respectively. +Две строки выше — эквивалентны, и используют [стрелочные функции](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Functions/Arrow_functions) и [`Function.prototype.bind`](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) соответственно. -In both cases, the `e` argument representing the React event will be passed as a second argument after the ID. With an arrow function, we have to pass it explicitly, but with `bind` any further arguments are automatically forwarded. +В обоих случаях, аргумент `e` представляющий событие React будет передан, как второй аргумент после ID. Используя стрелочную функцию необходимо передавать аргумент явно, но с `bind` любые последующие аргументы передаются автоматически. diff --git a/content/docs/nav.yml b/content/docs/nav.yml index 4d4a7571f..23ce43a99 100644 --- a/content/docs/nav.yml +++ b/content/docs/nav.yml @@ -22,7 +22,7 @@ - id: state-and-lifecycle title: State and Lifecycle - id: handling-events - title: Handling Events + title: Обработка событий - id: conditional-rendering title: Conditional Rendering - id: lists-and-keys From 00e60ccb5f027de9714821db30f6347c59b342f8 Mon Sep 17 00:00:00 2001 From: Daniil Patrikeev Date: Mon, 11 Feb 2019 19:17:09 +0300 Subject: [PATCH 2/7] some minor changes --- content/docs/handling-events.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/docs/handling-events.md b/content/docs/handling-events.md index f2e86f675..67c020529 100644 --- a/content/docs/handling-events.md +++ b/content/docs/handling-events.md @@ -29,7 +29,7 @@ redirect_from: ``` -Еще одно отличие, в React вы не можете отменить событие вернув `false`. Вы должны явно вызвать `preventDefault`. Например, в нативном HTML, чтобы отменить событие у ссылки, которая откроет новую страницу, вы можете написать: +Еще одно отличие, в React нельзя отменить событие вернув `false`. Нужно явно вызвать `preventDefault`. Например, в нативном HTML, чтобы отменить событие у ссылки, которая откроет новую страницу, можно написать: ```html @@ -56,7 +56,7 @@ function ActionLink() { Здесь `e` — это синтетическое событие. Не волнуйтесь о кроссбраузерности, React определяет синтетические события в соответствии со [спецификацией W3C](https://www.w3.org/TR/DOM-Level-3-Events/). Посмотрите руководство о [`SyntheticEvent`](/docs/events.html), чтобы узнать о них больше. -Используя React, обычно, вам не нужно вызывать `addEventListener`, чтобы добавить обработчики в DOM-елемент после того как он был создан. Вместо этого, просто добавьте обработчик сразу после того, как он отрендерился. +Используя React, обычно, нет необходимости вызывать `addEventListener`, чтобы добавить обработчики в DOM-элемент после его создания. Вместо этого, можно просто добавить обработчик сразу после того, как он отрендерился. Когда вы определяете компонент, используя [ES6-класс](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Classes), есть общий паттерн, в котором обработчик события должен быть методом. Например, этот компонент `Toggle` рендерит кнопку, которая позволяет пользователю переключать состояния между "ON" и "OFF": @@ -95,7 +95,7 @@ ReactDOM.render( Будьте внимательны со значением `this` в JSX-колбэках. В JavaScript, методы класса не [привязаны](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) по умолчанию. Если вы забудете привязать метод `this.handleClick` и передать его в `onClick`, при вызове функции `this` будет `undefined`. -Дело не в работе React, это часть того, [как работают функции в JavaScript](https://www.smashingmagazine.com/2014/01/understanding-javascript-function-prototype-bind/). Обычно, если вы ссылаетесь на метод без `()` после него, например, `onClick={this.handleClick}`, этот метод нужно привязать. +Дело не в работе React, это часть того, [как работают функции в JavaScript](https://www.smashingmagazine.com/2014/01/understanding-javascript-function-prototype-bind/). Обычно, если ссылаться на метод без `()` после него, например, `onClick={this.handleClick}`, этот метод нужно привязать. Если вам не по душе `bind`, существует 2 способа, как сделать это иначе. Если вы пользуетесь экспериментальным [синтаксисом инициализатора свойств](https://babeljs.io/docs/plugins/transform-class-properties/), вы можете использовать его, чтобы правильно привязать колбэки: From 1dc41693814a655a44da32c477b85b35edf4c2ee Mon Sep 17 00:00:00 2001 From: Daniil Patrikeev Date: Mon, 11 Feb 2019 22:42:44 +0300 Subject: [PATCH 3/7] revise translation --- content/docs/handling-events.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/content/docs/handling-events.md b/content/docs/handling-events.md index 67c020529..15db88196 100644 --- a/content/docs/handling-events.md +++ b/content/docs/handling-events.md @@ -10,8 +10,8 @@ redirect_from: Обработка событий в React-элементах очень похожа на обработку событий в DOM-элементах. Но есть несколько синтаксических отличий: -* События в React называются с помощью camelCase, вместо нижнего регистра. -* В JSX вы передаете функцию с помощью обработчика событий, вместо строки. +* События в React именуются в стиле camelCase вместо нижнего регистра. +* С JSX вы передаёте функцию как обработчик события вместо строки. Например, в HTML: @@ -29,7 +29,7 @@ redirect_from: ``` -Еще одно отличие, в React нельзя отменить событие вернув `false`. Нужно явно вызвать `preventDefault`. Например, в нативном HTML, чтобы отменить событие у ссылки, которая откроет новую страницу, можно написать: +Еще одно отличие — в React нельзя отменить событие, вернув `false`. Нужно явно вызвать `preventDefault`. Например, в обычном HTML, чтобы отменить событие у ссылки, которое открывает новую страницу, можно написать: ```html @@ -54,11 +54,11 @@ function ActionLink() { } ``` -Здесь `e` — это синтетическое событие. Не волнуйтесь о кроссбраузерности, React определяет синтетические события в соответствии со [спецификацией W3C](https://www.w3.org/TR/DOM-Level-3-Events/). Посмотрите руководство о [`SyntheticEvent`](/docs/events.html), чтобы узнать о них больше. +Здесь `e` — это синтетическое событие. React определяет синтетические события в соответствии со [спецификацией W3C](https://www.w3.org/TR/DOM-Level-3-Events/), поэтому не волнуйтесь о кроссбраузерности. Посмотрите руководство о [`SyntheticEvent`](/docs/events.html), чтобы узнать о них больше. -Используя React, обычно, нет необходимости вызывать `addEventListener`, чтобы добавить обработчики в DOM-элемент после его создания. Вместо этого, можно просто добавить обработчик сразу после того, как он отрендерился. +При использовании React обычно нет необходимости вызывать `addEventListener`, чтобы добавить обработчики в DOM-элемент после его создания. Вместо этого просто добавьте обработчик сразу после того, как он отрендерился. -Когда вы определяете компонент, используя [ES6-класс](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Classes), есть общий паттерн, в котором обработчик события должен быть методом. Например, этот компонент `Toggle` рендерит кнопку, которая позволяет пользователю переключать состояния между "ON" и "OFF": +Когда вы определяете компонент, используя [ES6-класс](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Classes), есть общий паттерн, согласно которому обработчик события должен быть методом. Например, этот компонент `Toggle` рендерит кнопку, которая позволяет пользователю переключать состояния между «ON» и «OFF»: ```js{6,7,10-14,18} class Toggle extends React.Component { @@ -66,7 +66,7 @@ class Toggle extends React.Component { super(props); this.state = {isToggleOn: true}; - // Эта привязка обязательна, для работы `this` в колбэке. + // Эта привязка обязательна для работы `this` в колбэке. this.handleClick = this.handleClick.bind(this); } @@ -93,16 +93,16 @@ ReactDOM.render( [**Посмотреть на CodePen**](http://codepen.io/gaearon/pen/xEmzGg?editors=0010) -Будьте внимательны со значением `this` в JSX-колбэках. В JavaScript, методы класса не [привязаны](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) по умолчанию. Если вы забудете привязать метод `this.handleClick` и передать его в `onClick`, при вызове функции `this` будет `undefined`. +Будьте внимательны со значением `this` в JSX-колбэках. В JavaScript методы класса не [привязаны](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) по умолчанию. Если вы забудете привязать метод `this.handleClick` и передать его в `onClick`, `this` будет `undefined` при фактическом вызове функции. Дело не в работе React, это часть того, [как работают функции в JavaScript](https://www.smashingmagazine.com/2014/01/understanding-javascript-function-prototype-bind/). Обычно, если ссылаться на метод без `()` после него, например, `onClick={this.handleClick}`, этот метод нужно привязать. -Если вам не по душе `bind`, существует 2 способа, как сделать это иначе. Если вы пользуетесь экспериментальным [синтаксисом инициализатора свойств](https://babeljs.io/docs/plugins/transform-class-properties/), вы можете использовать его, чтобы правильно привязать колбэки: +Если вам не по душе `bind`, существует 2 способа, как сделать это иначе. Если вы пользуетесь экспериментальным [синтаксисом полей общедоступных классов](https://babeljs.io/docs/plugins/transform-class-properties/), вы можете использовать его, чтобы правильно привязать колбэки: ```js{2-6} class LoggingButton extends React.Component { // Такой синтаксис гарантирует, что `this` привязан к handleClick. - // Предупреждение: экспериментальный синтаксис + // Предупреждение: это экспериментальный синтаксис handleClick = () => { console.log('this is:', this); } @@ -119,7 +119,7 @@ class LoggingButton extends React.Component { Такой синтаксис доступен в [Create React App](https://github.com/facebookincubator/create-react-app) по умолчанию. -Если вы не пользуетесь инициализаторами свойств, вы можете попробовать [стрелочные функции](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Functions/Arrow_functions) в колбэке: +Если вы не пользуетесь синтаксисом полей, можете попробовать [стрелочные функции](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Functions/Arrow_functions) в колбэке: ```js{7-9} class LoggingButton extends React.Component { @@ -138,11 +138,11 @@ class LoggingButton extends React.Component { } ``` -Проблема этого синтаксиса в том, что при каждом рендере `LoggingButton` создается новый колбэк. Чаще всего — это не страшно. Однако, если этот колбэк попадает как проп в дочерние компоненты, они будут отрендерены снова. Мы рекомендуем делать привзяку в конструкторе или использовать инициализаторы свойств, чтобы исключить проблемы с производительностью. +Проблема этого синтаксиса в том, что при каждом рендере `LoggingButton` создается новый колбэк. Чаще всего это не страшно. Однако, если этот колбэк попадает как проп в дочерние компоненты, эти компоненты могут быть отрендерены снова. Мы рекомендуем делать привязку в конструкторе или использовать синтаксис полей классов, чтобы избежать проблем с производительностью. ## Передача аргументов в обработчики событий {#passing-arguments-to-event-handlers} -Внутри цикла часто нужно передать дополнительный аргумент в обработчик события. Например, если `id` идентификатор строки, можно использовать следующие варианты: +Внутри цикла часто нужно передать дополнительный аргумент в обработчик события. Например, если `id` — это идентификатор строки, можно использовать следующие варианты: ```js @@ -151,4 +151,4 @@ class LoggingButton extends React.Component { Две строки выше — эквивалентны, и используют [стрелочные функции](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Functions/Arrow_functions) и [`Function.prototype.bind`](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) соответственно. -В обоих случаях, аргумент `e` представляющий событие React будет передан, как второй аргумент после ID. Используя стрелочную функцию необходимо передавать аргумент явно, но с `bind` любые последующие аргументы передаются автоматически. +В обоих случаях аргумент `e`, представляющий событие React, будет передан как второй аргумент после ID. Используя стрелочную функцию, необходимо передавать аргумент явно, но с `bind` любые последующие аргументы передаются автоматически. From 707ebbe458ce8efe4c72edd7aa3f51247a7a98bb Mon Sep 17 00:00:00 2001 From: Daniil Patrikeev Date: Wed, 13 Feb 2019 17:40:24 +0300 Subject: [PATCH 4/7] fix after review feedback --- content/docs/handling-events.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/docs/handling-events.md b/content/docs/handling-events.md index 15db88196..f92ae68c8 100644 --- a/content/docs/handling-events.md +++ b/content/docs/handling-events.md @@ -58,7 +58,7 @@ function ActionLink() { При использовании React обычно нет необходимости вызывать `addEventListener`, чтобы добавить обработчики в DOM-элемент после его создания. Вместо этого просто добавьте обработчик сразу после того, как он отрендерился. -Когда вы определяете компонент, используя [ES6-класс](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Classes), есть общий паттерн, согласно которому обработчик события должен быть методом. Например, этот компонент `Toggle` рендерит кнопку, которая позволяет пользователю переключать состояния между «ON» и «OFF»: +Используйте метод класса как обработчкик события, когда определяете компонент с использованием [ES6-класса](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Classes). Например, этот компонент `Toggle` рендерит кнопку, которая позволяет пользователю переключать состояния между «Включено» и «Выключено»: ```js{6,7,10-14,18} class Toggle extends React.Component { @@ -151,4 +151,4 @@ class LoggingButton extends React.Component { Две строки выше — эквивалентны, и используют [стрелочные функции](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Functions/Arrow_functions) и [`Function.prototype.bind`](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) соответственно. -В обоих случаях аргумент `e`, представляющий событие React, будет передан как второй аргумент после ID. Используя стрелочную функцию, необходимо передавать аргумент явно, но с `bind` любые последующие аргументы передаются автоматически. +В обоих случаях аргумент `e`, представляющий событие React, будет передан как второй аргумент после идентификатора. Используя стрелочную функцию, необходимо передавать аргумент явно, но с `bind` любые последующие аргументы передаются автоматически. From cd144cb214c5c6ed11f80ce12b1d15e303c4505d Mon Sep 17 00:00:00 2001 From: Daniil Patrikeev Date: Fri, 15 Feb 2019 12:12:40 +0300 Subject: [PATCH 5/7] fix after review feedback --- content/docs/handling-events.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/content/docs/handling-events.md b/content/docs/handling-events.md index f92ae68c8..a7ed96a3c 100644 --- a/content/docs/handling-events.md +++ b/content/docs/handling-events.md @@ -17,7 +17,7 @@ redirect_from: ```html ``` @@ -25,15 +25,15 @@ redirect_from: ```js{1} ``` Еще одно отличие — в React нельзя отменить событие, вернув `false`. Нужно явно вызвать `preventDefault`. Например, в обычном HTML, чтобы отменить событие у ссылки, которое открывает новую страницу, можно написать: ```html - - Click me + + Кликни меня ``` @@ -43,12 +43,12 @@ redirect_from: function ActionLink() { function handleClick(e) { e.preventDefault(); - console.log('The link was clicked.'); + console.log('По ссылке кликнули.'); } return ( - Click me + Кликни меня ); } @@ -79,7 +79,7 @@ class Toggle extends React.Component { render() { return ( ); } @@ -104,13 +104,13 @@ class LoggingButton extends React.Component { // Такой синтаксис гарантирует, что `this` привязан к handleClick. // Предупреждение: это экспериментальный синтаксис handleClick = () => { - console.log('this is:', this); + console.log('значение this:', this); } render() { return ( ); } @@ -124,14 +124,14 @@ class LoggingButton extends React.Component { ```js{7-9} class LoggingButton extends React.Component { handleClick() { - console.log('this is:', this); + console.log('значение this:', this); } render() { // Такой синтаксис гарантирует, что `this` привязан к handleClick. return ( ); } @@ -145,8 +145,8 @@ class LoggingButton extends React.Component { Внутри цикла часто нужно передать дополнительный аргумент в обработчик события. Например, если `id` — это идентификатор строки, можно использовать следующие варианты: ```js - - + + ``` Две строки выше — эквивалентны, и используют [стрелочные функции](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Functions/Arrow_functions) и [`Function.prototype.bind`](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) соответственно. From ec1ebcd34790912a4806013722758b79c3cb984a Mon Sep 17 00:00:00 2001 From: Daniil Patrikeev Date: Mon, 18 Feb 2019 19:30:46 +0300 Subject: [PATCH 6/7] fix after @another-guy review --- content/docs/handling-events.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/content/docs/handling-events.md b/content/docs/handling-events.md index a7ed96a3c..275785da7 100644 --- a/content/docs/handling-events.md +++ b/content/docs/handling-events.md @@ -29,7 +29,7 @@ redirect_from: ``` -Еще одно отличие — в React нельзя отменить событие, вернув `false`. Нужно явно вызвать `preventDefault`. Например, в обычном HTML, чтобы отменить событие у ссылки, которое открывает новую страницу, можно написать: +Еще одно отличие — в React нельзя предотвратить обработчик события по умолчанию, вернув `false`. Нужно явно вызвать `preventDefault`. Например, в обычном HTML, чтобы отменить выполнение встроенного обработчика события у ссылки, которое открывает новую страницу, можно написать: ```html @@ -54,11 +54,11 @@ function ActionLink() { } ``` -Здесь `e` — это синтетическое событие. React определяет синтетические события в соответствии со [спецификацией W3C](https://www.w3.org/TR/DOM-Level-3-Events/), поэтому не волнуйтесь о кроссбраузерности. Посмотрите руководство о [`SyntheticEvent`](/docs/events.html), чтобы узнать о них больше. +Здесь `e` — это синтетическое событие. React определяет синтетические события в соответствии со [спецификацией W3C](https://www.w3.org/TR/DOM-Level-3-Events/), поэтому не волнуйтесь о кроссбраузерности. Посмотрите [руководство о `SyntheticEvent`](/docs/events.html), чтобы узнать о них больше. -При использовании React обычно нет необходимости вызывать `addEventListener`, чтобы добавить обработчики в DOM-элемент после его создания. Вместо этого просто добавьте обработчик сразу после того, как он отрендерился. +При использовании React обычно не нужно вызывать `addEventListener`, чтобы добавить обработчики в DOM-элемент после его создания. Вместо этого добавьте обработчик сразу после того, как элемент отрендерился. -Используйте метод класса как обработчкик события, когда определяете компонент с использованием [ES6-класса](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Classes). Например, этот компонент `Toggle` рендерит кнопку, которая позволяет пользователю переключать состояния между «Включено» и «Выключено»: +В компоненте, определённом с помощью [ES6-класса](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Classes), в качестве обработчика события обычно выступает один из методов класса. Например, этот компонент `Toggle` рендерит кнопку, которая позволяет пользователю переключать состояния между «Включено» и «Выключено»: ```js{6,7,10-14,18} class Toggle extends React.Component { @@ -93,11 +93,11 @@ ReactDOM.render( [**Посмотреть на CodePen**](http://codepen.io/gaearon/pen/xEmzGg?editors=0010) -Будьте внимательны со значением `this` в JSX-колбэках. В JavaScript методы класса не [привязаны](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) по умолчанию. Если вы забудете привязать метод `this.handleClick` и передать его в `onClick`, `this` будет `undefined` при фактическом вызове функции. +Будьте внимательны со значением `this` в JSX-колбэках. В JavaScript методы класса не [привязаны](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) по умолчанию. Если вы забудете привязать метод `this.handleClick` и передать его в `onClick`, `this` будет `undefined` в момент вызова функции. Дело не в работе React, это часть того, [как работают функции в JavaScript](https://www.smashingmagazine.com/2014/01/understanding-javascript-function-prototype-bind/). Обычно, если ссылаться на метод без `()` после него, например, `onClick={this.handleClick}`, этот метод нужно привязать. -Если вам не по душе `bind`, существует 2 способа, как сделать это иначе. Если вы пользуетесь экспериментальным [синтаксисом полей общедоступных классов](https://babeljs.io/docs/plugins/transform-class-properties/), вы можете использовать его, чтобы правильно привязать колбэки: +Если вам не по душе `bind`, существует два других способа. Если вы пользуетесь экспериментальным [синтаксисом общедоступных полей классов](https://babeljs.io/docs/plugins/transform-class-properties/), вы можете использовать его, чтобы правильно привязать колбэки: ```js{2-6} class LoggingButton extends React.Component { From dd48eb55115d981e37a43792e4e065f43e3e582f Mon Sep 17 00:00:00 2001 From: Daniil Patrikeev Date: Thu, 21 Feb 2019 07:56:35 +0300 Subject: [PATCH 7/7] final touches --- content/docs/handling-events.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/docs/handling-events.md b/content/docs/handling-events.md index 275785da7..904b1316b 100644 --- a/content/docs/handling-events.md +++ b/content/docs/handling-events.md @@ -54,7 +54,7 @@ function ActionLink() { } ``` -Здесь `e` — это синтетическое событие. React определяет синтетические события в соответствии со [спецификацией W3C](https://www.w3.org/TR/DOM-Level-3-Events/), поэтому не волнуйтесь о кроссбраузерности. Посмотрите [руководство о `SyntheticEvent`](/docs/events.html), чтобы узнать о них больше. +В приведённом выше коде `e` — это синтетическое событие. React определяет синтетические события в соответствии со [спецификацией W3C](https://www.w3.org/TR/DOM-Level-3-Events/), поэтому не волнуйтесь о кроссбраузерности. Посмотрите [руководство о `SyntheticEvent`](/docs/events.html), чтобы узнать о них больше. При использовании React обычно не нужно вызывать `addEventListener`, чтобы добавить обработчики в DOM-элемент после его создания. Вместо этого добавьте обработчик сразу после того, как элемент отрендерился. @@ -93,7 +93,7 @@ ReactDOM.render( [**Посмотреть на CodePen**](http://codepen.io/gaearon/pen/xEmzGg?editors=0010) -Будьте внимательны со значением `this` в JSX-колбэках. В JavaScript методы класса не [привязаны](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) по умолчанию. Если вы забудете привязать метод `this.handleClick` и передать его в `onClick`, `this` будет `undefined` в момент вызова функции. +При обращении к `this` в JSX-колбэках необходимо учитывать, что методы класса в JavaScript по умолчанию не [привязаны](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) к контексту. Если вы забудете привязать метод `this.handleClick` и передать его в `onClick`, значение `this` будет `undefined` в момент вызова функции. Дело не в работе React, это часть того, [как работают функции в JavaScript](https://www.smashingmagazine.com/2014/01/understanding-javascript-function-prototype-bind/). Обычно, если ссылаться на метод без `()` после него, например, `onClick={this.handleClick}`, этот метод нужно привязать.