-
Notifications
You must be signed in to change notification settings - Fork 1.1k
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
docs(cn): translate docs/handling-events #84
docs(cn): translate docs/handling-events #84
Conversation
content/docs/handling-events.md
Outdated
permalink: docs/handling-events.html | ||
prev: state-and-lifecycle.html | ||
next: conditional-rendering.html | ||
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元素的很相似,但是有一点语法上的不同: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
React 元素的事件处理和 DOM元素的很相似,但是有一点语法上的不同: | |
React 元素的事件处理和 DOM 元素的很相似,但是有一点语法上的不同: |
content/docs/handling-events.md
Outdated
|
||
```html | ||
<button onclick="activateLasers()"> | ||
Activate Lasers | ||
</button> | ||
``` | ||
|
||
is slightly different in React: | ||
在React 中有些略微不同: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
在React 中有些略微不同: | |
在 React 中有些略微不同: |
content/docs/handling-events.md
Outdated
|
||
```js{1} | ||
<button onClick={activateLasers}> | ||
Activate Lasers | ||
</button> | ||
``` | ||
|
||
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 中阻止链接默认打开一个新页面,你可以这样写: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
在 React 中另一个不同是你不能使用返回 false 的方式阻止默认行为。你必须明确的使用 preventDefault。例如,传统的 HTML 中阻止链接默认打开一个新页面,你可以这样写: | |
在 React 中另一个不同是你不能使用返回 `false` 的方式阻止默认行为。你必须明确的使用 preventDefault。例如,传统的 HTML 中阻止链接默认打开一个新页面,你可以这样写: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
我觉得 explicitly 为 “显式的” 好一些
content/docs/handling-events.md
Outdated
|
||
## Passing Arguments to Event Handlers | ||
## 向事件处理程序传递参数 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
你这里翻译成事件处理程序,上面有的翻译成事件处理器,有的翻译成事件处理函数。需要统一 一下
content/docs/handling-events.md
Outdated
|
||
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` 很麻烦,这里有两种方式可以解决。 如果你正在使用实验性的[公有类字段语法](https://babeljs.io/docs/plugins/transform-class-properties/),你可以使用类字段正确的绑定回调函数: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
根据术语表,class 可以不翻译
Deploy preview for cn-reactjs ready! Built with commit 3f312e8 |
content/docs/handling-events.md
Outdated
* React events are named using camelCase, rather than lowercase. | ||
* With JSX you pass a function as the event handler, rather than a string. | ||
* React 事件的命名采用驼峰式,而不是小写。 | ||
* 采用 JSX 的语法你需要传入一个函数作为事件处理函数,而不是一个字符串。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
* 采用 JSX 的语法你需要传入一个函数作为事件处理函数,而不是一个字符串。 | |
* 采用 JSX 的语法时你需要传入一个函数作为事件处理函数,而不是一个字符串。 |
content/docs/handling-events.md
Outdated
|
||
* React events are named using camelCase, rather than lowercase. | ||
* With JSX you pass a function as the event handler, rather than a string. | ||
* React 事件的命名采用驼峰式,而不是小写。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
* React 事件的命名采用驼峰式,而不是小写。 | |
* React 事件的命名采用小驼峰式(camelCase),而不是纯小写。 |
content/docs/handling-events.md
Outdated
* React events are named using camelCase, rather than lowercase. | ||
* With JSX you pass a function as the event handler, rather than a string. | ||
* React 事件的命名采用驼峰式,而不是小写。 | ||
* 采用 JSX 的语法时你需要传入一个函数作为事件处理函数,而不是一个字符串。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
* 采用 JSX 的语法时你需要传入一个函数作为事件处理函数,而不是一个字符串。 | |
* 使用 JSX 语法时你需要传入一个函数作为事件处理函数,而不是一个字符串。 |
content/docs/handling-events.md
Outdated
|
||
```js{1} | ||
<button onClick={activateLasers}> | ||
Activate Lasers | ||
</button> | ||
``` | ||
|
||
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 中阻止链接默认打开一个新页面,你可以这样写: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
在 React 中另一个不同是你不能使用返回 `false` 的方式阻止默认行为。你必须显式的使用 preventDefault 。例如,传统的 HTML 中阻止链接默认打开一个新页面,你可以这样写: | |
在 React 中另一个不同点是你不能通过返回 `false` 的方式阻止默认行为。你必须显式的使用 preventDefault。例如,传统的 HTML 中阻止链接默认打开一个新页面,你可以这样写: |
content/docs/handling-events.md
Outdated
|
||
```html | ||
<a href="#" onclick="console.log('The link was clicked.'); return false"> | ||
Click me | ||
</a> | ||
``` | ||
|
||
In React, this could instead be: | ||
在 React,应该这样来写: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
在 React,应该这样来写: | |
在 React 中,可能是这样的: |
content/docs/handling-events.md
Outdated
@@ -54,19 +54,19 @@ 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 spec](https://www.w3.org/TR/DOM-Level-3-Events/) 来定义这些合成事件,所以你不需要担心跨浏览器的兼容性问题。 如果想了解更多,请查看 [`SyntheticEvent`](/docs/events.html) 参考指南。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
在这里,`e` 是一个合成事件。React 根据 [W3C spec](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) 参考指南。 |
content/docs/handling-events.md
Outdated
|
||
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 元素添加监听器。你仅仅需要在这个元素初始渲染的时候提供一个监听器。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
使用 React 时你一般不需要使用 `addEventListener` 为一个已创建的 DOM 元素添加监听器。你仅仅需要在这个元素初始渲染的时候提供一个监听器。 | |
使用 React 时,一般不需要使用 `addEventListener` 为已创建的 DOM 元素添加监听器。React恰恰与之相反,你仅需要在该元素初始渲染的时候添加一个监听器。 |
content/docs/handling-events.md
Outdated
|
||
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 class](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Classes) 语法定义一个组件的时候,通常的做法是使事件处理函数成为 class 中的一个方法。例如,下面的 `Toggle` 组件渲染一个让用户切换开关状态的按钮: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
当你使用 [ES6 class](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Classes) 语法定义一个组件的时候,通常的做法是使事件处理函数成为 class 中的一个方法。例如,下面的 `Toggle` 组件渲染一个让用户切换开关状态的按钮: | |
当你使用 [ES6 class](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Classes) 语法定义一个组件的时候,通常的做法是将事件处理函数声明为 class 中的方法。例如,下面的 `Toggle` 组件会渲染一个让用户切换开关状态的按钮: |
content/docs/handling-events.md
Outdated
@@ -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) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[**在 CodePen 上试试**](http://codepen.io/gaearon/pen/xEmzGg?editors=0010) | |
[**在 CodePen 上尝试**](http://codepen.io/gaearon/pen/xEmzGg?editors=0010) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
后面与之相同
content/docs/handling-events.md
Outdated
|
||
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. | ||
你必须谨慎对待 JSX 回调函数中的 `this`, 在 JavaScript 中, class 的方法默认是不会[绑定](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Function/bind) `this` 的。如果你忘记绑定 `this.handleClick` 并把它传入了 `onClick`,当你调用这个函数的时候 `this` 会是 `undefined`。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
你必须谨慎对待 JSX 回调函数中的 `this`, 在 JavaScript 中, class 的方法默认是不会[绑定](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Function/bind) `this` 的。如果你忘记绑定 `this.handleClick` 并把它传入了 `onClick`,当你调用这个函数的时候 `this` 会是 `undefined`。 | |
你必须谨慎对待 JSX 回调函数中的 `this`,在 JavaScript 中,class 的方法默认不会[绑定](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Function/bind) `this`。如果你忘记绑定 `this.handleClick` 并把它传入了 `onClick`,当你调用这个函数的时候 `this` 的值为 `undefined`。 |
content/docs/handling-events.md
Outdated
|
||
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}`,你应该为这个方法绑定 `this`。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这并不是 React 的特殊行为;它是[函数如何在 JavaScript 中运行](https://www.smashingmagazine.com/2014/01/understanding-javascript-function-prototype-bind/)的一部分。通常情况下,如果你没有在方法后面添加 `()`,例如 `onClick={this.handleClick}`,你应该为这个方法绑定 `this`。 | |
这并不是 React 的特殊行为;这其实与[函数在 JavaScript 中工作原理](https://www.smashingmagazine.com/2014/01/understanding-javascript-function-prototype-bind/)有关。通常情况下,如果你没有在方法后面添加 `()`,例如 `onClick={this.handleClick}`,你应该为这个方法绑定 `this`。 |
content/docs/handling-events.md
Outdated
|
||
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` 很麻烦,这里有两种方式可以解决。 如果你正在使用实验性的[公有类字段语法](https://babeljs.io/docs/plugins/transform-class-properties/),你可以使用类字段正确的绑定回调函数: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
如果觉得使用 `bind` 很麻烦,这里有两种方式可以解决。 如果你正在使用实验性的[公有类字段语法](https://babeljs.io/docs/plugins/transform-class-properties/),你可以使用类字段正确的绑定回调函数: | |
如果觉得使用 `bind` 很麻烦,这里有两种方式可以解决。如果你正在使用实验性的 [public class fields 语法](https://babeljs.io/docs/plugins/transform-class-properties/),你可以使用 class fileds 正确的绑定回调函数: |
content/docs/handling-events.md
Outdated
|
||
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: | ||
如果你没有使用 class 字段语法,你可以在回调函数中使用[箭头函数](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
如果你没有使用 class 字段语法,你可以在回调函数中使用[箭头函数](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions): | |
如果你没有使用 class fileds 语法,你可以在回调函数中使用[箭头函数](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions): |
content/docs/handling-events.md
Outdated
@@ -138,17 +138,17 @@ class LoggingButton extends React.Component { | |||
} | |||
``` | |||
|
|||
The problem with this syntax is that a different callback is created each time the `LoggingButton` renders. In most cases, this is fine. However, if this callback is passed as a prop to lower components, those components might do an extra re-rendering. We generally recommend binding in the constructor or using the class fields syntax, to avoid this sort of performance problem. | |||
使用这个语法有个问题就是每次 `LoggingButton` 渲染的时候都会创建一个不同的回调函数。在大多数情况下,这没有问题。然而如果这个回调函数作为一个属性值传入低阶组件,这些组件可能会进行额外的重新渲染。我们通常建议在构造器中绑定或使用类字段语法来避免这类性能问题。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
使用这个语法有个问题就是每次 `LoggingButton` 渲染的时候都会创建一个不同的回调函数。在大多数情况下,这没有问题。然而如果这个回调函数作为一个属性值传入低阶组件,这些组件可能会进行额外的重新渲染。我们通常建议在构造器中绑定或使用类字段语法来避免这类性能问题。 | |
此语法问题在于每次渲染 `LoggingButton` 时都会创建不同的回调函数。在大多数情况下,这没什么问题,但如果该回调函数作为 prop 传入子组件时,这些组件可能会进行额外的重新渲染。我们通常建议在构造器中绑定或使用 class fileds 语法来避免这类性能问题。 |
content/docs/handling-events.md
Outdated
|
||
```js | ||
<button onClick={(e) => this.deleteRow(id, e)}>Delete Row</button> | ||
<button onClick={this.deleteRow.bind(this, id)}>Delete Row</button> | ||
``` | ||
|
||
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. | ||
上述两种方式是等价的,分别通过 [arrow functions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions) 和 [`Function.prototype.bind`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Function/bind) 来为事件处理函数传递参数。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
上述两种方式是等价的,分别通过 [arrow functions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions) 和 [`Function.prototype.bind`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Function/bind) 来为事件处理函数传递参数。 | |
上述两种方式是等价的,分别通过[箭头函数](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions) 和 [`Function.prototype.bind`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Function/bind) 来为事件处理函数传递参数。 |
content/docs/handling-events.md
Outdated
|
||
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 事件对象将会被作为第二个参数进行传递。通过箭头函数的方式,事件对象必须显式的进行传递,但是通过 `bind` 的方式,事件对象以及更多的参数将会被隐式的进行传递。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
上面两个例子中,参数 `e` 作为 React 事件对象将会被作为第二个参数进行传递。通过箭头函数的方式,事件对象必须显式的进行传递,但是通过 `bind` 的方式,事件对象以及更多的参数将会被隐式的进行传递。 | |
在这两种情况下,参数 `e` 都表示为 React 的事件对象,并作为 ID 后的第二个参数传递。通过箭头函数的方式,事件对象必须显式传递,但是通过 `bind` 的方式,事件对象以及更多的参数将会被隐式传递。 |
@Ryanhui 修改下~ |
Deploy preview for zh-hans-reactjs ready! Built with commit 3f312e8 |
…i/zh-hans.reactjs.org into translate-Handling-Events
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
以上细节确认后便可 merge。
content/docs/handling-events.md
Outdated
@@ -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) 中默认开启。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[Create React App](https://github.com/facebookincubator/create-react-app) 默认启用此语法。
…i/zh-hans.reactjs.org into translate-Handling-Events
content/docs/handling-events.md
Outdated
|
||
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 的事件对象被作为第二个参数传递。通过箭头函数的方式,事件对象必须显式的进行传递,但是通过 `bind` 的方式,事件对象以及更多的参数将会被隐式的进行传递。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
在这两种情况下,参数 `e` 会作为 React 的事件对象被作为第二个参数传递。通过箭头函数的方式,事件对象必须显式的进行传递,但是通过 `bind` 的方式,事件对象以及更多的参数将会被隐式的进行传递。 | |
在这两种情况下,React 的事件对象 `e` 会被作为第二个参数传递。如果通过箭头函数的方式,事件对象必须显式的进行传递,而通过 `bind` 的方式,事件对象以及更多的参数将会被隐式的进行传递。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
改了下说法,读着会更连贯一些
No description provided.