Skip to content

Commit 396f6f1

Browse files
committed
Translate fully List and Key page.
1 parent ec0dd43 commit 396f6f1

File tree

1 file changed

+38
-38
lines changed

1 file changed

+38
-38
lines changed

content/docs/lists-and-keys.md

Lines changed: 38 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ prev: conditional-rendering.html
66
next: forms.html
77
---
88

9-
Đầu tiên, hãy xem lại cách bạn chuyển đổi danh sách trong Javascript.
9+
Đầu tiên, hãy xem lại cách bạn chuyển đổi danh sách (lists) trong Javascript.
1010

1111
Trong đoạn code bên dưới, chúng ta sử dụng hàm [`map()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map) để nhân đôi giá trị của từng phần tử trong mảng `numbers`. Chúng ta gán mảng mới là kết quả trả về từ hàm `map()` vào biến `doubled` và xuất kết quả đó ra:
1212

@@ -18,13 +18,13 @@ console.log(doubled);
1818

1919
Đoạn code trên xuất kết quả `[2, 4, 6, 8, 10]` ra màn hình console.
2020

21-
Trong React, việc chuyển đổi mảng các phần tử thành danh sách của các [element](/docs/rendering-elements.html) là gần như giống hệt nhau.
21+
Trong React, việc chuyển đổi mảng các phần tử thành danh sách (arrays into lists) của các [element](/docs/rendering-elements.html) là gần như giống hệt nhau.
2222

2323
### Render Nhiều Component {#rendering-multiple-components}
2424

25-
Bạn có thể xây dựng các tập hợp của các element và [nhúng những tập hợp element này vào JSX](/docs/introducing-jsx.html#embedding-expressions-in-jsx) bằng việc sử dụng dấu ngoặc nhọn `{}`.
25+
Bạn có thể xây dựng nhiều tập hợp (collections) của các element và [nhúng những tập hợp element này vào JSX](/docs/introducing-jsx.html#embedding-expressions-in-jsx) bằng việc sử dụng dấu ngoặc nhọn `{}`.
2626

27-
Dưới đây, chúng ta sử dụng vòng lặp trên mảng `numbers` và sử dụng hàm [`map()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map) trong JavaScript. Kết quả trả về là một thẻ `<li>` cho mỗi vòng lặp. Cuối cùng, chúng ta gán mảng kết quả gồm những element cho `listItems`:
27+
Dưới đây, chúng ta sử dụng vòng lặp trên mảng `numbers` và sử dụng hàm [`map()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map) trong JavaScript. Kết quả trả về là một thẻ `<li>` cho mỗi vòng lặp. Cuối cùng, chúng ta gán mảng kết quả gồm những element (thẻ `<li>`) cho `listItems`:
2828

2929
```javascript{2-4}
3030
const numbers = [1, 2, 3, 4, 5];
@@ -42,15 +42,15 @@ ReactDOM.render(
4242
);
4343
```
4444

45-
[**Try it on CodePen**](https://codepen.io/gaearon/pen/GjPyQr?editors=0011)
45+
[**Chạy thử trên CodePen**](https://codepen.io/gaearon/pen/GjPyQr?editors=0011)
4646

47-
Đoạn code trên hiển thị một danh sách dấu chấm tròn đứng trước các số từ 1 đến 5.
47+
Đoạn code trên hiển thị một danh sách từ 1 đến 5 và có chứa các dấu chấm tròn trước mỗi số.
4848

49-
### Danh Sách Component cơ bản {#basic-list-component}
49+
### Component Có Danh Sách Cơ Bản (Basic List Component) {#basic-list-component}
5050

5151
Thông thường bạn sẽ render các danh sách trong một [component](/docs/components-and-props.html).
5252

53-
Chúng ta có thể điều chỉnh để đưa đoạn code trong ví dụ trước vào một component và trong component đó nhận một mảng `numbers` và xuất ra danh sách các element.
53+
Chúng ta có thể điều chỉnh để đưa đoạn code trong ví dụ trước vào một component và trong component đó sẽ nhận một mảng `numbers` và xuất ra danh sách các element.
5454

5555
```javascript{3-5,7,13}
5656
function NumberList(props) {
@@ -72,9 +72,9 @@ ReactDOM.render(
7272
);
7373
```
7474

75-
Khi bạn chạy đoạn code này, bạn sẽ nhận một thông báo lưu ý rằng một thuộc tính key nên được truyền vào cho mỗi phần tử. Một "key" là một thuộc tính chuỗi đặc biệt bạn cần phải đưa vào khi tạo danh sách các element. Chúng ta sẽ thảo luận tại sao điều này lại quan trọng trong mục kế tiếp.
75+
Khi bạn chạy đoạn code này, bạn sẽ nhận một thông báo lưu ý rằng một thuộc tính key nên được truyền vào cho mỗi phần tử (thẻ `<li>` bên trong hàm `map()`). Một "key" là một thuộc tính chuỗi đặc biệt bạn cần phải đưa vào khi tạo danh sách các element. Chúng ta sẽ thảo luận tại sao điều này lại quan trọng trong mục kế tiếp.
7676

77-
Hãy gán một `key` vào danh sách các phần tử của chúng ta bên trong `numbers.map()` và sửa cảnh báo bị thiếu key lúc nãy.
77+
Hãy gán `key` vào từng phần tử của chúng ta bên trong `numbers.map()` và sửa cảnh báo bị thiếu key lúc nãy.
7878

7979
```javascript{4}
8080
function NumberList(props) {
@@ -96,11 +96,11 @@ ReactDOM.render(
9696
);
9797
```
9898

99-
[**Try it on CodePen**](https://codepen.io/gaearon/pen/jrXYRR?editors=0011)
99+
[**Chạy thử trên CodePen**](https://codepen.io/gaearon/pen/jrXYRR?editors=0011)
100100

101101
## Keys {#keys}
102102

103-
Các key giúp React xác định những phần tử nào đã thay đổi, được thêm, hay bị xóa. Các key nên được truyền vào các element bên trong một mảng để cho các element này có một định danh ổn định:
103+
Các key giúp React xác định những phần tử nào đã thay đổi, được thêm, hay bị xóa. Các key nên được truyền vào các element bên trong một mảng để cho các element này có một định danh cố định (stable identity):
104104

105105
```js{3}
106106
const numbers = [1, 2, 3, 4, 5];
@@ -111,7 +111,7 @@ const listItems = numbers.map((number) =>
111111
);
112112
```
113113

114-
Các tốt nhất để chọn một key là sử dụng một chuỗi mà được xác định là duy nhất trong một danh sách các phần tử. Cách thông thường nhất mà bạn sẽ sử dụng là dùng các ID từ dữ liệu của bạn như là key:
114+
Các tốt nhất để chọn một key là sử dụng một chuỗi mà được xác định là duy nhất trong các nút anh em (siblings). Cách thông thường nhất mà bạn sẽ sử dụng là dùng các ID từ dữ liệu của bạn làm key:
115115

116116
```js{2}
117117
const todoItems = todos.map((todo) =>
@@ -121,34 +121,34 @@ const todoItems = todos.map((todo) =>
121121
);
122122
```
123123

124-
Khi bạn không có các ID ổn định cho việc render các phần tử, bạn có thể sử dụng thứ tự của phần tử đó trong danh sách như là một key cũng như là một phương án cuối cùng:
124+
Khi bạn không có các ID cố định (stable IDs) cho việc render các phần tử, bạn có thể sử dụng thứ tự của phần tử đó trong danh sách như là một key cũng như là một phương án cuối cùng:
125125

126126
```js{2,3}
127127
const todoItems = todos.map((todo, index) =>
128-
// Only do this if items have no stable IDs
128+
// Chỉ làm điều này khi không có ID cố định
129129
<li key={index}>
130130
{todo.text}
131131
</li>
132132
);
133133
```
134134

135-
Chúng tôi không khuyến khích sử dụng các thứ tự của phần tử cho các key nếu thứ tự của các phần tử có thể thay đổi. Điều này có thể ảnh hưởng đến hiệu suất và có thể gây ra một vài vấn đề với state của component. Xem qua bài viết của Robin Pokorny về việc [giải thích ảnh hưởng tiêu cực của việc sử dụng thứ tự phần tử cho key](https://medium.com/@robinpokorny/index-as-a-key-is-an-anti-pattern-e0349aece318). Nếu bạn lựa chọn việc không gán cho key một định danh rõ ràng thì mặc định React sẽ sử dựng thứ tự của phần tử cho key.
135+
Chúng tôi không khuyến khích sử dụng thứ tự của các phần tử cho các key nếu thứ tự của các phần tử có thể thay đổi. Điều này có thể ảnh hưởng đến hiệu suất và có thể gây ra một vài vấn đề với state của component. Xem qua bài viết của Robin Pokorny về việc [giải thích ảnh hưởng tiêu cực của việc sử dụng thứ tự phần tử cho key](https://medium.com/@robinpokorny/index-as-a-key-is-an-anti-pattern-e0349aece318). Nếu bạn lựa chọn việc không gán cho key một định danh rõ ràng thì mặc định React sẽ sử dựng thứ tự của phần tử cho key.
136136

137-
Đây là một [giải thích về việc tại sao các key là cần thiết](/docs/reconciliation.html#recursing-on-children) nếu bạn quan tâm nhiều về vấn đề này.
137+
Xem thêm [giải thích về việc tại sao các key là cần thiết](/docs/reconciliation.html#recursing-on-children) nếu bạn quan tâm nhiều về vấn đề này.
138138

139-
### Extracting Components with Keys {#extracting-components-with-keys}
139+
### Chia Nhỏ Các Component Với Key {#extracting-components-with-keys}
140140

141-
Keys only make sense in the context of the surrounding array.
141+
Các key chỉ hợp lí trong trường hợp liên quan đến mảng dữ liệu.
142142

143-
For example, if you [extract](/docs/components-and-props.html#extracting-components) a `ListItem` component, you should keep the key on the `<ListItem />` elements in the array rather than on the `<li>` element in the `ListItem` itself.
143+
Ví dụ, nếu bạn [chia nhỏ](/docs/components-and-props.html#extracting-components) component `ListItem`, bạn nên giữ việc truyền key vào các `<ListItem />` element trong mảng thay vì truyền vào thẻ `<li>` bên trong `ListItem` element.
144144

145-
**Example: Incorrect Key Usage**
145+
**Ví dụ: Trường hợp sử dụng key chưa chính xác**
146146

147147
```javascript{4,5,14,15}
148148
function ListItem(props) {
149149
const value = props.value;
150150
return (
151-
// Wrong! There is no need to specify the key here:
151+
// Sai! Ở đây không cần truyền vào key:
152152
<li key={value.toString()}>
153153
{value}
154154
</li>
@@ -158,7 +158,7 @@ function ListItem(props) {
158158
function NumberList(props) {
159159
const numbers = props.numbers;
160160
const listItems = numbers.map((number) =>
161-
// Wrong! The key should have been specified here:
161+
// Sai! Key nên được truyền vào ở đây:
162162
<ListItem value={number} />
163163
);
164164
return (
@@ -175,18 +175,18 @@ ReactDOM.render(
175175
);
176176
```
177177

178-
**Example: Correct Key Usage**
178+
**Ví dụ: Trường hợp sử dụng key chính xác**
179179

180180
```javascript{2,3,9,10}
181181
function ListItem(props) {
182-
// Correct! There is no need to specify the key here:
182+
// Đúng! Ở đây không cần cụ thể key:
183183
return <li>{props.value}</li>;
184184
}
185185
186186
function NumberList(props) {
187187
const numbers = props.numbers;
188188
const listItems = numbers.map((number) =>
189-
// Correct! Key should be specified inside the array.
189+
// Đúng! Key nên được cụ thể bên trong mảng.
190190
<ListItem key={number.toString()}
191191
value={number} />
192192
);
@@ -204,13 +204,13 @@ ReactDOM.render(
204204
);
205205
```
206206

207-
[**Try it on CodePen**](https://codepen.io/gaearon/pen/ZXeOGM?editors=0010)
207+
[**Chạy thử trên CodePen**](https://codepen.io/gaearon/pen/ZXeOGM?editors=0010)
208208

209-
A good rule of thumb is that elements inside the `map()` call need keys.
209+
Một nguyên tắc nhỏ đó là các element bên trong hàm gọi `map()` cần các key.
210210

211-
### Keys Must Only Be Unique Among Siblings {#keys-must-only-be-unique-among-siblings}
211+
### Các Key Chỉ Bắt Buộc Là Duy Nhất Giữa Các Nút Anh Em (Siblings) {#keys-must-only-be-unique-among-siblings}
212212

213-
Keys used within arrays should be unique among their siblings. However they don't need to be globally unique. We can use the same keys when we produce two different arrays:
213+
Các Key được sử dụng bên trong các mảng nên là duy nhất giữa các nút anh em của chúng. Tuy nhiên chúng không cần là duy nhất đối với toàn bộ component. Chúng ta có thể sử dụng các key giống nhau khi chúng ta tạo hai mảng khác nhau:
214214

215215
```js{2,5,11,12,19,21}
216216
function Blog(props) {
@@ -248,9 +248,9 @@ ReactDOM.render(
248248
);
249249
```
250250

251-
[**Try it on CodePen**](https://codepen.io/gaearon/pen/NRZYGN?editors=0010)
251+
[**Chạy thử trên CodePen**](https://codepen.io/gaearon/pen/NRZYGN?editors=0010)
252252

253-
Keys serve as a hint to React but they don't get passed to your components. If you need the same value in your component, pass it explicitly as a prop with a different name:
253+
Các key được sử dụng để gợi ý cho React nhưng chúng không được truyền vào cho các component (Nghĩa là các component con sẽ không đọc được prop.key). Nếu bạn cần đọc giá trị giống với giá trị của key bên trong component của bạn, truyền giá trị đó như một prop với một cái tên khác:
254254

255255
```js{3,4}
256256
const content = posts.map((post) =>
@@ -261,11 +261,11 @@ const content = posts.map((post) =>
261261
);
262262
```
263263

264-
With the example above, the `Post` component can read `props.id`, but not `props.key`.
264+
Với ví dụ bên trên, component `Post` có thể đọc giá trị của `props.id`, mà không phải là `props.key`.
265265

266-
### Embedding map() in JSX {#embedding-map-in-jsx}
266+
### Nhúng map() vào JSX {#embedding-map-in-jsx}
267267

268-
In the examples above we declared a separate `listItems` variable and included it in JSX:
268+
Trong các ví dụ trên chúng ta đã khái báo `listItems` thành một biến riêng biệt và đưa nó vào JSX:
269269

270270
```js{3-6}
271271
function NumberList(props) {
@@ -282,7 +282,7 @@ function NumberList(props) {
282282
}
283283
```
284284

285-
JSX allows [embedding any expression](/docs/introducing-jsx.html#embedding-expressions-in-jsx) in curly braces so we could inline the `map()` result:
285+
JSX cho phép [nhúng expression](/docs/introducing-jsx.html#embedding-expressions-in-jsx) bất kì vào trong dấu ngoặc nhọn vì vậy chúng ta có thể xuất kết quả của hàm `map()` như sau:
286286

287287
```js{5-8}
288288
function NumberList(props) {
@@ -298,6 +298,6 @@ function NumberList(props) {
298298
}
299299
```
300300

301-
[**Try it on CodePen**](https://codepen.io/gaearon/pen/BLvYrB?editors=0010)
301+
[**Chạy thử trên CodePen**](https://codepen.io/gaearon/pen/BLvYrB?editors=0010)
302302

303-
Sometimes this results in clearer code, but this style can also be abused. Like in JavaScript, it is up to you to decide whether it is worth extracting a variable for readability. Keep in mind that if the `map()` body is too nested, it might be a good time to [extract a component](/docs/components-and-props.html#extracting-components).
303+
Thỉnh thoảng cách làm như trên làm code gọn gàng hơn, nhưng kiểu này cũng có thể bị lạm dụng. Như trong JavaScript, đôi khi bạn phải quyết định xem có cần phải tạo thêm một biến để cho dễ đọc hay không. Hãy nhớ rằng nếu bên trong hàm `map()` bị lồng (nested) quá nhiều, đó có thể là lúc thích hợp để [chia nhỏ một component](/docs/components-and-props.html#extracting-components).

0 commit comments

Comments
 (0)