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
Copy file name to clipboardExpand all lines: src/content/learn/state-a-components-memory.md
+13-13Lines changed: 13 additions & 13 deletions
Original file line number
Diff line number
Diff line change
@@ -151,7 +151,7 @@ button {
151
151
152
152
</Sandpack>
153
153
154
-
`handleClick` là một trình xử lý sự kiện đang cập nhật một biến cục bộ, `index`. Nhưng hai điều ngăn cản sự thay đổi đó được hiển thị:
154
+
`handleClick` là một trình xử lý sự kiện đang cập nhật một biến cục bộ (local), `index`. Nhưng hai điều ngăn cản sự thay đổi đó được hiển thị:
155
155
156
156
1.**Các biến cục bộ không tồn tại giữa các lần render.** Khi React render component này lần thứ hai, nó sẽ render lại từ đầu - nó không xem xét bất kỳ thay đổi nào đối với các biến cục bộ.
157
157
2.**Thay đổi các biến cục bộ sẽ không kích hoạt render.** React không nhận ra rằng nó cần render lại component với dữ liệu mới.
`index` là một biến state và `setIndex` là hàm setter.
190
190
191
-
> Cú pháp `[` và `]` ở đây được gọi là [array destructuring](https://javascript.info/destructuring-assignment) và nó cho phép bạn đọc giá trị từ một mảng. Mảng được trả về bởi `useState` luôn có đúng hai mục.
191
+
> Cú pháp `[` và `]` ở đây được gọi là [array destructuring](https://javascript.info/destructuring-assignment) và nó cho phép bạn đọc giá trị từ một mảng (array). Mảng được trả về bởi `useState` luôn có đúng hai mục.
192
192
193
193
Đây là cách chúng hoạt động cùng nhau trong `handleClick`:
194
194
@@ -341,7 +341,7 @@ State chỉ là một trong những tính năng đó, nhưng bạn sẽ gặp c
341
341
342
342
<Pitfall>
343
343
344
-
**Hooks—các hàm bắt đầu bằng `use`—chỉ có thể được gọi ở cấp độ trên cùng của các component của bạn hoặc [Hooks của riêng bạn.](/learn/reusing-logic-with-custom-hooks)** Bạn không thể gọi Hooks bên trong các điều kiện, vòng lặp, hoặc các hàm lồng ghép khác. Hooks là các hàm, nhưng sẽ hữu ích khi nghĩ về chúng như là các khai báo không điều kiện về các nhu cầu của component của bạn. Bạn "sử dụng" các tính năng của React ở đầu component của bạn tương tự như cách bạn "nhập khẩu" các mô-đun ở đầu file của bạn.
344
+
**Hooks—các hàm bắt đầu bằng `use`—chỉ có thể được gọi ở cấp độ trên cùng của các component của bạn hoặc [Hooks của riêng bạn.](/learn/reusing-logic-with-custom-hooks)** Bạn không thể gọi Hooks bên trong các điều kiện, vòng lặp, hoặc các hàm lồng ghép khác. Hooks là các hàm, nhưng sẽ hữu ích khi nghĩ về chúng như là các khai báo không điều kiện về các nhu cầu của component của bạn. Bạn "sử dụng (use)" các tính năng của React ở đầu component của bạn tương tự như cách bạn "import" các mô-đun ở đầu file của bạn.
345
345
346
346
</Pitfall>
347
347
@@ -361,7 +361,7 @@ Quy ước là đặt tên cho cặp này như `const [something, setSomething]`
361
361
362
362
</Note>
363
363
364
-
Tham số duy nhất của `useState` là **giá trị ban đầu** của biến state của bạn. Trong ví dụ này, giá trị ban đầu của `index` được đặt thành `0` với `useState(0)`.
364
+
Đối số (Argument) duy nhất của `useState` là **giá trị ban đầu** của biến state của bạn. Trong ví dụ này, giá trị ban đầu của `index` được đặt thành `0` với `useState(0)`.
365
365
366
366
Mỗi khi component của bạn được render, `useState` sẽ trả về một mảng chứa hai giá trị:
1.**Component của bạn được render lần đầu tiên.** Bởi vì bạn đã truyền `0` cho `useState` như là giá trị ban đầu cho `index`, nó sẽ trả về `[0, setIndex]`. React nhớ rằng giá trị state mới nhất là `0`.
378
378
2.**Bạn cập nhật state.** Khi người dùng nhấp vào nút, nó gọi `setIndex(index + 1)`. `index` là `0`, vì vậy nó là `setIndex(1)`. Điều này nói với React rằng bây giờ hãy nhớ `index` là `1` và kích hoạt một lần render khác.
379
-
3.**Lần render thứ hai của component của bạn.** React vẫn thấy `useState(0)`, nhưng vì React *nhớ* rằng bạn đã đặt `index` thành `1`, nó trả về `[1, setIndex]` thay thế.
379
+
3.**Lần render thứ hai của component của bạn.** React vẫn thấy `useState(0)`, nhưng vì React *nhớ* rằng bạn đã đặt `index` thành `1`, nên thay vào đó nó trả về `[1, setIndex]`.
380
380
4. Và cứ thế tiếp tục!
381
381
382
382
## Cung cấp nhiều biến state cho một component {/*giving-a-component-multiple-state-variables*/}
@@ -520,7 +520,7 @@ button {
520
520
521
521
</Sandpack>
522
522
523
-
Việc sử dụng nhiều biến state là điều hợp lý nếu chúng không liên quan đến nhau, như `index` và `showMore` trong ví dụ này. Nhưng nếu bạn thấy rằng bạn thường xuyên thay đổi hai biến state cùng lúc, thì bạn có thể dễ dàng hơn nếu kết hợp chúng thành một biến state duy nhất. Ví dụ, nếu bạn có một form với nhiều trường, thì thuận tiện hơn khi sử dụng một biến state duy nhất giữ một object thay vì mỗi trường một biến state riêng. Đọc thêm tại [Chọn Cấu Trúc State](/learn/choosing-the-state-structure) để biết thêm mẹo.
523
+
Việc sử dụng nhiều biến state là điều hợp lý nếu chúng không liên quan đến nhau, như `index` và `showMore` trong ví dụ này. Nhưng nếu bạn thấy rằng bạn thường xuyên thay đổi hai biến state cùng lúc, thì bạn có thể dễ dàng hơn nếu kết hợp chúng thành một biến state duy nhất. Ví dụ, nếu bạn có một form với nhiều trường, thì thuận tiện hơn khi sử dụng một biến state duy nhất để giữ một object thay vì dùng một biến state riêng cho mỗi trường. Đọc thêm tại [Chọn Cấu Trúc State](/learn/choosing-the-state-structure) để biết thêm mẹo.
524
524
525
525
<DeepDive>
526
526
@@ -730,7 +730,7 @@ Bạn không cần hiểu nó để sử dụng React, nhưng bạn có thể th
730
730
731
731
## State được cô lập và riêng tư {/*state-is-isolated-and-private*/}
732
732
733
-
State là cục bộ cho từng thể hiện của component trên màn hình. Nói cách khác, **nếu bạn render cùng một component hai lần, mỗi bản sao sẽ có state hoàn toàn tách biệt!** Việc thay đổi state ở một bản sao sẽ không ảnh hưởng đến bản sao kia.
733
+
State là cục bộ cho từng phiên bản của component trên màn hình. Nói cách khác, **nếu bạn render cùng một component hai lần, mỗi bản sao sẽ có state hoàn toàn tách biệt!** Việc thay đổi state ở một bản sao sẽ không ảnh hưởng đến bản sao kia.
734
734
735
735
Ví dụ này, component `Gallery` từ ví dụ trước được render hai lần mà không thay đổi logic nào. Hãy thử nhấp vào các nút bên trong mỗi gallery. Bạn sẽ thấy state của chúng hoàn toàn độc lập:
736
736
@@ -891,11 +891,11 @@ button {
891
891
892
892
</Sandpack>
893
893
894
-
Điều này làm cho state khác với các biến thông thường mà bạn có thể khai báo ở đầu mô-đun của bạn. State không gắn liền với một cuộc gọi hàm cụ thể hoặc một vị trí trong mã, nhưng nó "cục bộ" cho vị trí cụ thể trên màn hình. Bạn đã render hai component `<Gallery />`, vì vậy state của chúng được lưu trữ riêng biệt.
894
+
Điều này làm cho state khác với các biến thông thường mà bạn có thể khai báo ở đầu mô-đun của bạn. State không gắn liền với một cuộc gọi hàm cụ thể hoặc một vị trí trong code, nhưng nó "cục bộ" cho vị trí cụ thể trên màn hình. Bạn đã render hai component `<Gallery />`, vì vậy state của chúng được lưu trữ riêng biệt.
895
895
896
896
Cũng lưu ý rằng component `Page` không "biết" bất kỳ điều gì về state của `Gallery` hoặc thậm chí liệu nó có hay không. Khác với props, **state hoàn toàn riêng tư với component khai báo nó.** Component cha không thể thay đổi nó. Điều này cho phép bạn thêm state vào bất kỳ component nào hoặc loại bỏ nó mà không ảnh hưởng đến phần còn lại của các component.
897
897
898
-
Điều gì sẽ xảy ra nếu bạn muốn cả hai phòng trưng bày giữ cho các state của chúng đồng bộ? Cách đúng để làm điều đó trong React là *loại bỏ* state khỏi các component con và thêm nó vào cha gần nhất của chúng. Một vài trang tiếp theo sẽ tập trung vào việc tổ chức state của một component đơn lẻ, nhưng chúng ta sẽ trở lại chủ đề này trong [Chia Sẻ State Giữa Các Component.](/learn/sharing-state-between-components)
898
+
Điều gì sẽ xảy ra nếu bạn muốn cả hai phòng trưng bày (gallery) giữ cho các state của chúng đồng bộ? Cách đúng để làm điều đó trong React là *loại bỏ* state khỏi các component con và thêm nó vào component cha gần nhất của chúng. Một vài trang tiếp theo sẽ tập trung vào việc tổ chức state của một component đơn lẻ, nhưng chúng ta sẽ trở lại chủ đề này trong [Chia Sẻ State Giữa Các Component.](/learn/sharing-state-between-components)
Chú ý cách `hasPrev` và `hasNext` được sử dụng *cả* cho JSX trả về và bên trong các hàm xử lý sự kiện! Mẫu này rất tiện dụng vì các hàm xử lý sự kiện ["nắm bắt"](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures) mọi biến được khai báo trong quá trình render.
1222
+
Chú ý cách `hasPrev` và `hasNext` được sử dụng *cho cả* JSX trả về và bên trong các hàm xử lý sự kiện! Mẫu này rất tiện dụng vì các hàm xử lý sự kiện ["nắm bắt"](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures) mọi biến được khai báo trong quá trình render.
1223
1223
1224
1224
</Solution>
1225
1225
@@ -1331,7 +1331,7 @@ h1 { margin-top: 10px; }
1331
1331
1332
1332
<Hint>
1333
1333
1334
-
Bạn có bất kỳ giới hạn nào về _vị trí_ mà Hooks có thể được gọi không? Component này có vi phạm quy tắc nào không? Kiểm tra xem có nhận xét nào vô hiệu hóa kiểm tra linter checks--this thường là nơi ẩn lỗi!
1334
+
Bạn có bất kỳ giới hạn nào về _vị trí_ mà Hooks có thể được gọi không? Component này có vi phạm quy tắc nào không? Kiểm tra xem có nhận xét nào vô hiệu hóa kiểm tra linter--đây thường là nơi ẩn lỗi!
1335
1335
1336
1336
</Hint>
1337
1337
@@ -1370,7 +1370,7 @@ export default function FeedbackForm() {
1370
1370
1371
1371
<Solution>
1372
1372
1373
-
Hooks chỉ được gọi ở cấp độ trên cùng của hàm component. Ở đây, định nghĩa `isSent` đầu tiên tuân theo quy tắc này, nhưng định nghĩa `message` lại được lồng trong một điều kiện.
1373
+
Hooks chỉ có thể được gọi ở cấp độ trên cùng của hàm component. Ở đây, định nghĩa `isSent` đầu tiên tuân theo quy tắc này, nhưng định nghĩa `message` lại được lồng trong một điều kiện.
1374
1374
1375
1375
Đưa nó ra khỏi điều kiện để sửa lỗi:
1376
1376
@@ -1452,7 +1452,7 @@ Nếu linter của bạn đã được [cấu hình cho React](/learn/editor-set
1452
1452
1453
1453
#### Loại bỏ state không cần thiết {/*remove-unnecessary-state*/}
1454
1454
1455
-
Khi bạn nhấn nút, ví dụ này sẽ yêu cầu tên người dùng và sau đó hiển thị một alert chào họ. Bạn đã cố dùng state để lưu tên, nhưng vì lý do nào đó lần đầu tiên nó hiển thị "Hello, !", và sau đó mỗi lần sau lại hiện "Hello, [name]!" với giá trị nhập trước đó.
1455
+
Khi bạn nhấn nút, ví dụ này sẽ yêu cầu tên người dùng và sau đó hiển thị một thông báo để chào họ. Bạn đã cố dùng state để lưu tên, nhưng vì lý do nào đó lần đầu tiên nó hiển thị "Hello, !", và sau đó mỗi lần sau lại hiện "Hello, [name]!" với giá trị nhập trước đó.
1456
1456
1457
1457
Để sửa code này, hãy loại bỏ biến state không cần thiết. (Chúng ta sẽ thảo luận về [tại sao điều này không hoạt động](/learn/state-as-a-snapshot) sau.)
0 commit comments