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
* trans why jsx
* trans embedding-expressions-in-jsx
* trans jsx-is-an-expression-too
* trans specifying-attributes-with-jsx
* trans jsx-prevents-injection-attacks
* trans complete for introducing jsx
* fix some keywords
* address pr comments
This funny tag syntax is neither a string nor HTML.
15
+
Cú pháp thẻ này không phải là một chuỗi kí tự cũng không phải là một thẻ HTML
16
16
17
-
It is called JSX, and it is a syntax extension to JavaScript. We recommend using it with React to describe what the UI should look like. JSX may remind you of a template language, but it comes with the full power of JavaScript.
17
+
Nó được gọi là JSX, là một cú pháp mở rộng cho JavaScript. Chúng tôi khuyến khích sử dụng JSX với React để mô tả giao diện (UI). JSX có thể trông giống Ngôn ngữ Khuôn mẫu (Template language), nhưng JSX đi kèm với toàn bộ tính năng của JavaScript.
18
18
19
-
JSX produces React "elements". We will explore rendering them to the DOM in the [next section](/docs/rendering-elements.html). Below, you can find the basics of JSX necessary to get you started.
19
+
JSX cho ra những "phần tử"(Element) React. Chúng ta sẽ khám phá việc chúng được render vào DOM như thế nào ở [phần tiếp theo](/docs/rendering-elements.html). Dưới đây là những kiến thức cần thiết cơ bản của JSX để có thể bắt đầu.
20
20
21
-
### Why JSX? {#why-jsx}
21
+
### Tại sao lại là JSX? {#why-jsx}
22
22
23
-
React embraces the fact that rendering logic is inherently coupled with other UI logic: how events are handled, how the state changes over time, and how the data is prepared for display.
23
+
React khuyến khích một thực tế là logic của render được kết hợp một cách tự nhiên với những logic khác liên quan tới UI: Các sự kiện được xử lý như thế nào, state thay đổi như thế nào theo thời gian và dữ liệu được chuẩn bị như thế nào cho việc hiển thị.
24
24
25
-
Instead of artificially separating *technologies* by putting markup and logic in separate files, React [separates *concerns*](https://en.wikipedia.org/wiki/Separation_of_concerns)with loosely coupled units called "components" that contain both. We will come back to components in a [further section](/docs/components-and-props.html), but if you're not yet comfortable putting markup in JS, [this talk](https://www.youtube.com/watch?v=x7cQ3mrcKaY)might convince you otherwise.
25
+
Thay vì tách biệt các *công nghệ* một cách giả tạo bằng cách đưa định nghĩa giao diện và logic vào những tệp khác nhau, React [tách bạch *mối quan hệ*](https://en.wikipedia.org/wiki/Separation_of_concerns)bằng những đơn vị rời rạc gọi là "components" chứa cả hai cái trên. Chúng ta sẽ bàn về components trong một [phần khác](/docs/components-and-props.html), nếu bạn vẫn chưa cảm thấy thoải mái việc đưa các định nghĩa giao diện vào trong JS, [buổi nói chuyện này](https://www.youtube.com/watch?v=x7cQ3mrcKaY)có thể thuyết phục bạn.
26
26
27
-
React [doesn't require](/docs/react-without-jsx.html)using JSX, but most people find it helpful as a visual aid when working with UI inside the JavaScript code. It also allows React to show more useful error and warning messages.
27
+
React [Không bắt buộc](/docs/react-without-jsx.html)sử dụng JSX, nhưng phần lớn mọi người đều cho rằng nó hữu dụng khi làm việc với giao diện (UI) trong mã JavaScript. JSX cũng cho phép React hiển thị những thông báo lỗi và "lời cảnh báo" (warning) hữu ích hơn.
28
28
29
-
With that out of the way, let's get started!
29
+
Vậy bắt đầu thôi!
30
30
31
-
### Embedding Expressions in JSX {#embedding-expressions-in-jsx}
31
+
### Nhúng Biểu thức trong JSX {#embedding-expressions-in-jsx}
32
32
33
-
In the example below, we declare a variable called `name`and then use it inside JSX by wrapping it in curly braces:
33
+
Ở ví dụ dưới, chúng ta khai báo một biến tên là `name`và dùng bên trong JSX bằng cách bao trong cặp dấu ngoặc nhọn:
34
34
35
35
```js{1,2}
36
36
const name = 'Josh Perez';
@@ -42,9 +42,9 @@ ReactDOM.render(
42
42
);
43
43
```
44
44
45
-
You can put any valid [JavaScript expression](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Expressions)inside the curly braces in JSX. For example, `2 + 2`, `user.firstName`, or`formatName(user)`are all valid JavaScript expressions.
45
+
Bạn có thể nhúng bất kỳ [biểu thức JavaScript hợp lệ](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Expressions)bên trong JSX bằng cặp dấu ngoặc nhọn. Ví dụ, `2 + 2`, `user.firstName`, hoặc`formatName(user)`đều là các biểu thức hợp lệ của JavaScript.
46
46
47
-
In the example below, we embed the result of calling a JavaScript function, `formatName(user)`, into an `<h1>` element.
47
+
Ở ví dụ dưới, chúng ta nhúng kết quả của một hàm JavaScript, `formatName(user)`, vào bên trong phần tử `<h1>`.
48
48
49
49
```js{12}
50
50
function formatName(user) {
@@ -70,13 +70,13 @@ ReactDOM.render(
70
70
71
71
[](codepen://introducing-jsx)
72
72
73
-
We split JSX over multiple lines for readability. While it isn't required, when doing this, we also recommend wrapping it in parentheses to avoid the pitfalls of [automatic semicolon insertion](http://stackoverflow.com/q/2846283).
73
+
Chúng ta có thể tách JSX vào những tệp khác nhau cho dễ đọc. Việc này không bắt buộc, nhưng khi làm như vậy, chúng tôi cũng khuyến khích nhúng trong cặp dấu ngoặc để tránh rơi vào trường hợp JS Engines [tự thêm chấm phẩy](http://stackoverflow.com/q/2846283).
74
74
75
-
### JSX is an Expression Too {#jsx-is-an-expression-too}
75
+
### JSX cũng là một biểu thức {#jsx-is-an-expression-too}
76
76
77
-
After compilation, JSX expressions become regular JavaScript function calls and evaluate to JavaScript objects.
77
+
Sau khi biên dịch (compile), biểu thức JSX là những gọi hàm bình thường của JavaScript và thành những đối tượng JavaScript sau khi được gọi.
78
78
79
-
This means that you can use JSX inside of `if`statements and `for` loops, assign it to variables, accept it as arguments, and return it from functions:
79
+
Điều này có nghĩa là bạn có thể dùng JSX bên trong câu lệnh `if`cũng như vòng lặp `for`, gán nó cho biến, dùng như tham số hàm, và trả về JSX từ hàm.
80
80
81
81
```js{3,5}
82
82
function getGreeting(user) {
@@ -87,37 +87,37 @@ function getGreeting(user) {
87
87
}
88
88
```
89
89
90
-
### Specifying Attributes with JSX {#specifying-attributes-with-jsx}
90
+
### Xác định thuộc tính của thẻ với JSX {#specifying-attributes-with-jsx}
91
91
92
-
You may use quotes to specify string literals as attributes:
92
+
Bạn có thể dùng dấu nháy để khai báo một chuỗi như là thuộc tính của thẻ:
93
93
94
94
```js
95
95
constelement=<div tabIndex="0"></div>;
96
96
```
97
97
98
-
You may also use curly braces to embed a JavaScript expression in an attribute:
98
+
Bạn có thể dùng dấu ngoặc nhọn để nhúng một biểu thức Javascript vào trong thuộc tính:
99
99
100
100
```js
101
101
constelement=<img src={user.avatarUrl}></img>;
102
102
```
103
103
104
-
Don't put quotes around curly braces when embedding a JavaScript expression in an attribute. You should either use quotes (for string values) or curly braces (for expressions), but not both in the same attribute.
104
+
Đừng để dấu nháy xung quanh ngoặc nhọn khi nhúng biểu thức JavaScript vào trong một thuộc tính. Bạn có thể dùng dấu nháy (cho giá trị chuỗi) hoặc ngoặc nhọn (cho biểu thức), nhưng không được dùng cả hai cho cùng 1 thuộc tính.
105
105
106
-
>**Warning:**
106
+
>**CẢNH BÁO:**
107
107
>
108
-
>Since JSX is closer to JavaScript than to HTML, React DOM uses `camelCase`property naming convention instead of HTML attribute names.
108
+
>Vì JSX gần với JavaScript hơn là so với HTML, React DOM sử dụng chuẩn quy tắc đặt tên `camelCase`cho thuộc tính thay vì dùng tên thuộc tính gốc của HTML.
109
109
>
110
-
>For example, `class`becomes [`className`](https://developer.mozilla.org/en-US/docs/Web/API/Element/className)in JSX, and`tabindex`becomes[`tabIndex`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/tabIndex).
110
+
>Ví dụ, `class`trở thành [`className`](https://developer.mozilla.org/en-US/docs/Web/API/Element/className)trong JSX, và`tabindex`trở thành[`tabIndex`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/tabIndex).
111
111
112
-
### Specifying Children with JSX {#specifying-children-with-jsx}
112
+
### Dùng thẻ con trong JSX {#specifying-children-with-jsx}
113
113
114
-
If a tag is empty, you may close it immediately with `/>`, like XML:
114
+
Nếu tag rỗng (không có thẻ con), bạn có thể đóng nó ngay lập tức với `/>`, giống XML:
### JSX chống tấn công kiểu Injection {#jsx-prevents-injection-attacks}
132
132
133
-
It is safe to embed user input in JSX:
133
+
Việc nhúng đầu vào của người dùng trong JSX là an toàn:
134
134
135
135
```js
136
136
consttitle=response.potentiallyMaliciousInput;
137
-
//This is safe:
137
+
//Việc này an toàn:
138
138
constelement=<h1>{title}</h1>;
139
139
```
140
140
141
-
By default, React DOM [escapes](http://stackoverflow.com/questions/7381974/which-characters-need-to-be-escaped-on-html)any values embedded in JSX before rendering them. Thus it ensures that you can never inject anything that's not explicitly written in your application. Everything is converted to a string before being rendered. This helps prevent [XSS (cross-site-scripting)](https://en.wikipedia.org/wiki/Cross-site_scripting) attacks.
141
+
Mặc định, React DOM [loại bỏ những kí tự đặc biệt](http://stackoverflow.com/questions/7381974/which-characters-need-to-be-escaped-on-html)ở bên trong bất kì giá trị nào được nhúng vào JSX trước khi render chúng. Việc này đảm bảo không có giá trị xấu nào được vô tình được đưa vào ứng dụng. Mọi thứ đều được chuyển thành chuỗi trước khi được render. Việc này giúp ngăn chặn phương thức [tấn công XSS (cross-site-scripting)](https://en.wikipedia.org/wiki/Cross-site_scripting).
Babel compiles JSX down to `React.createElement()` calls.
145
+
Babel biên dịch JSX thành những câu gọi hàm `React.createElement()`.
146
146
147
-
These two examples are identical:
147
+
Hai ví dụ dưới đây là tương tự:
148
148
149
149
```js
150
150
constelement= (
@@ -162,10 +162,10 @@ const element = React.createElement(
162
162
);
163
163
```
164
164
165
-
`React.createElement()`performs a few checks to help you write bug-free code but essentially it creates an object like this:
165
+
`React.createElement()`thực hiện một số kiểm tra để giúp bạn viết mã không bị lỗi nhưng cơ bản nó tạo một đối tượng giống thế này:
166
166
167
167
```js
168
-
//Note: this structure is simplified
168
+
//Lưu ý: cấu trúc nãy đã được đơn giản hoá
169
169
constelement= {
170
170
type:'h1',
171
171
props: {
@@ -175,10 +175,10 @@ const element = {
175
175
};
176
176
```
177
177
178
-
These objects are called "Reactelements". You can think of them as descriptions of what you want to see on the screen. React reads these objects and uses them to construct the DOM and keep it up to date.
178
+
Những đối tượng này được gọi là "Những phần tử React" (React elements). Bạn có thể xem chúng như là mô tả những gì bạn muốn thấy trên màn hình. React đọc những đối tượng này và dùng chúng để xây dựng DOM và cập nhật nó.
179
179
180
-
We will explore rendering React elements to the DOM in the next section.
180
+
Chúng ta sẽ khám phá cách các React Element được render vào DOM thế nào trong phần kế tiếp.
181
181
182
-
>**Tip:**
182
+
>**Gợi ý:**
183
183
>
184
-
>We recommend using the ["Babel" language definition](http://babeljs.io/docs/editors)for your editor of choice so that both ES6 and JSX code is properly highlighted. This website uses the [Oceanic Next](https://labs.voronianski.com/oceanic-next-color-scheme/)color scheme which is compatible with it.
184
+
>Chúng tôi khuyến khích sử dụng [Định nghĩa ngôn ngữ "Babel"](http://babeljs.io/docs/editors)cho trình soạn thảo của bạn như vậy cả mã ES6 và JSX đều có thể được tô sáng rõ ràng. Trang web này dùng tập màu [Oceanic Next](https://labs.voronianski.com/oceanic-next-color-scheme/)cái mà phù hợp cho việc này.
0 commit comments