diff --git a/content/docs/handling-events.md b/content/docs/handling-events.md
index 175303c24..1d52cc0b3 100644
--- a/content/docs/handling-events.md
+++ b/content/docs/handling-events.md
@@ -1,6 +1,6 @@
---
id: handling-events
-title: Handling Events
+title: Việc Bắt các Sự kiện
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:
+Việc bắt sự kiện của những element React rất giống với những element DOM. Có một số khác biệt về cú pháp như:
-* React events are named using camelCase, rather than lowercase.
-* With JSX you pass a function as the event handler, rather than a string.
+* Những sự kiện của React được đặt tên theo dạng camelCase, thay vì lowercase.
+* Với JSX, bạn có thể sử dụng "hàm" (function) để bắt sự kiện thay vì phải truyền vào một chuỗi.
-For example, the HTML:
+Ví dụ, đoạn HTML sau:
```html
```
-is slightly different in React:
+sẽ có đôi chút khác biệt trong 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:
+Một điểm khác biệt nữa trong React là bạn không thể trả về `false` để chặn những hành vi mặc định mà phải gọi `preventDefault` trực tiếp. Lấy ví dụ với đoạn HTML sau, để chặn hành vi mặc định của đường dẫn là mở trang mới, bạn có thể viết:
```html
@@ -37,7 +37,7 @@ Another difference is that you cannot return `false` to prevent default behavior
```
-In React, this could instead be:
+Còn trong React, bạn có thể làm như thế này:
```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.
+Ở đây, `e` là một sự kiện ảo. React định nghĩa những sự kiện ảo này dựa trên [chuẩn W3C](https://www.w3.org/TR/DOM-Level-3-Events/), nên bạn không cần lo lắng về sự tương thích giữa những browser. Hãy tham khảo tài liệu về [`SyntheticEvent`](/docs/events.html) để tìm hiểu thêm.
-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.
+Khi làm việc với React, bạn thường không phải gọi `addEventListener` để gắn listener cho element DOM khi nó được khởi tạo. Thay vào đó, bạn chỉ cần gắn listener ngay lần đầu element được render.
-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:
+Khi bạn định nghĩa component bằng [class ES6](https://developer.mozilla.org/vi/docs/Web/JavaScript/Reference/Classes), một mẫu thiết kế phổ biến là sử dụng phương thức của class để bắt sự kiện. Ví dụ, component `Toggle` dưới đây render một chiếc nút để người dùng thay đổi giữa state “ON” và “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
+ // Phép "ràng buộc" (bind) này là cần thiết để `this` hoạt động trong callback
this.handleClick = this.handleClick.bind(this);
}
@@ -93,16 +93,16 @@ ReactDOM.render(
[**Try it on CodePen**](https://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.
+Bạn phải cẩn thận về ý nghĩa của `this` trong những callback JSX. Trong JavaScript, những phương thức của class mặc định không bị [ràng buộc](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Function/bind). Nếu bạn quên ràng buộc `this.handleClick` và truyền nó vào `onClick`, `this` sẽ có giá trị là `undefined` khi phương thức này được thực thi.
-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.
+Đây không phải là tính chất của React mà là một phần trong [cách những hàm JavaScript hoạt động](https://www.smashingmagazine.com/2014/01/understanding-javascript-function-prototype-bind/). Thông thường, nếu bạn trỏ tới phương thức mà không có `()` theo sau như `onClick={this.handleClick}`, bạn nên ràng buộc phương thức đó.
-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:
+Nếu bạn thấy việc gọi `bind` phiền phức thì có hai giải pháp. Trong trường hợp bạn đang sử dụng [cú pháp thuộc tính class public](https://babeljs.io/docs/plugins/transform-class-properties/) thử nghiệm, bạn có thể dùng những thuộc tính class để ràng buộc callback một cách chính xác:
```js{2-6}
class LoggingButton extends React.Component {
- // This syntax ensures `this` is bound within handleClick.
- // Warning: this is *experimental* syntax.
+ // Cú pháp này đảm bảo `this` được ràng buộc trong handleClick.
+ // Lưu ý: đây là cú pháp *thử nghiệm*.
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).
+Cú pháp này được bật theo mặc định trong [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:
+Nếu bạn không sử dụng cú pháp thuộc tính class, bạn có thể dùng "hàm rút gọn" [arrow function](https://developer.mozilla.org/vi/docs/Web/JavaScript/Reference/Functions/Arrow_functions) trong callback:
```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
+ // Cú pháp này đảm bảo `this` được ràng buộc trong handleClick
return (