Skip to content

Commit 28f6cec

Browse files
committed
fixed indentation
1 parent 59dcb6f commit 28f6cec

File tree

1 file changed

+34
-34
lines changed

1 file changed

+34
-34
lines changed

content/docs/thinking-in-react.md

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ id: thinking-in-react
33
title: Tư duy trong React
44
permalink: docs/thinking-in-react.html
55
redirect_from:
6-
- 'blog/2013/11/05/thinking-in-react.html'
7-
- 'docs/thinking-in-react-zh-CN.html'
6+
- 'blog/2013/11/05/thinking-in-react.html'
7+
- 'docs/thinking-in-react-zh-CN.html'
88
prev: composition-vs-inheritance.html
99
---
1010

@@ -22,12 +22,12 @@ Dữ liệu trả về từ JSON API như sau:
2222

2323
```
2424
[
25-
{category: "Sporting Goods", price: "$49.99", stocked: true, name: "Football"},
26-
{category: "Sporting Goods", price: "$9.99", stocked: true, name: "Baseball"},
27-
{category: "Sporting Goods", price: "$29.99", stocked: false, name: "Basketball"},
28-
{category: "Electronics", price: "$99.99", stocked: true, name: "iPod Touch"},
29-
{category: "Electronics", price: "$399.99", stocked: false, name: "iPhone 5"},
30-
{category: "Electronics", price: "$199.99", stocked: true, name: "Nexus 7"}
25+
{category: "Sporting Goods", price: "$49.99", stocked: true, name: "Football"},
26+
{category: "Sporting Goods", price: "$9.99", stocked: true, name: "Baseball"},
27+
{category: "Sporting Goods", price: "$29.99", stocked: false, name: "Basketball"},
28+
{category: "Electronics", price: "$99.99", stocked: true, name: "iPod Touch"},
29+
{category: "Electronics", price: "$399.99", stocked: false, name: "iPhone 5"},
30+
{category: "Electronics", price: "$199.99", stocked: true, name: "Nexus 7"}
3131
];
3232
```
3333

@@ -43,21 +43,21 @@ Vì mô hình dữ liệu thường hiển thị dưới dạng chuỗi JSON, n
4343

4444
Có năm component trong ứng dựng, dữ liệu mà component hiển thị sẽ được in nghiêng
4545

46-
1. **`FilterableProductTable` (orange):** chứa toàn bộ cả ứng dụng
47-
2. **`SearchBar` (blue):** nơi *người dùng nhập dữ liệu*
48-
3. **`ProductTable` (green):** lọc và hiển thị *kết quả* dựa trên *dữ liệu đầu vào*
49-
4. **`ProductCategoryRow` (turquoise):** hiển thị trương mục theo *thể loại*
50-
5. **`ProductRow` (red):** hiển thị *sản phẩm* theo từng dòng
46+
1. **`FilterableProductTable` (orange):** chứa toàn bộ cả ứng dụng
47+
2. **`SearchBar` (blue):** nơi *người dùng nhập dữ liệu*
48+
3. **`ProductTable` (green):** lọc và hiển thị *kết quả* dựa trên *dữ liệu đầu vào*
49+
4. **`ProductCategoryRow` (turquoise):** hiển thị trương mục theo *thể loại*
50+
5. **`ProductRow` (red):** hiển thị *sản phẩm* theo từng dòng
5151

5252
Nhìn vào `ProductTable`, bạn sẽ thấy rằng tiêu đề cuả bảng (bao gồm những tiêu đề như "Name" và "Price") không được chia nhỏ thành các component. Đây là một tuỳ chọn mang tính cá nhânnhân, đã có những cuộc thảo luận về vấn đề này. Trong ví dụ, chúng ta để nó như là một phần của `ProductTable` bởi vì nó là một phần khi hiển thị *bảng dữ liệu* thuộc về `ProductTable`. Tuy nhiên, nếu như phần tiêu đề trở nên phức tạp (ví dụ nếu chúng ta thêm chức năng sắp xếp phân loại), thì tất nhiên sẽ hơp lí hơn khi có component `ProductTableHeader` cho phần tiêu đề.
5353

5454
Bây giờ khi xác định các component trong bản mock, hãy sắp xếp nó theo một hệ thống phân chia cấp bậc. Những component cùng nằm bên trong một component trong bản mock thì nó nên là component con trong hệ thống cấp bậc:
5555

56-
* `FilterableProductTable`
57-
* `SearchBar`
58-
* `ProductTable`
59-
* `ProductCategoryRow`
60-
* `ProductRow`
56+
* `FilterableProductTable`
57+
* `SearchBar`
58+
* `ProductTable`
59+
* `ProductCategoryRow`
60+
* `ProductRow`
6161

6262
## Bước 2: Xây dựng một bản tĩnh trong React {#step-2-build-a-static-version-in-react}
6363

@@ -86,23 +86,23 @@ Có hai kiểu "mô hình" dữ liệu trong React: props và state. Hãy chắc
8686

8787
Suy tính về các thành phần dữ liệu trong ví dụ ứng dựng, nó bao gồm:
8888

89-
* Danh sách gốc các sản phẩm
90-
* Từ khoá tìm kiếm từ phía người dùng
91-
* Giá trị của checkbox
92-
* Danh sách sản phẩm sau khi phân loại
89+
* Danh sách gốc các sản phẩm
90+
* Từ khoá tìm kiếm từ phía người dùng
91+
* Giá trị của checkbox
92+
* Danh sách sản phẩm sau khi phân loại
9393

9494
Hãy cùng tìm hiểu xem thành phần nào là trạng thái bằng cách đặt ra 3 câu hổi cho mỗi phần:
9595

96-
1. Có phải nó được truyền từ component cha qua props không? Nếu có thì nó có thể không phải là state.
97-
2. Dữ liệu có thay đổi không? nếu không thì nó không phải là state.
98-
3. Bạn có thể tính toán nó từ các state hay props khác trong component cuả bạn không? nếu có thì nó không phải là state.
96+
1. Có phải nó được truyền từ component cha qua props không? Nếu có thì nó có thể không phải là state.
97+
2. Dữ liệu có thay đổi không? nếu không thì nó không phải là state.
98+
3. Bạn có thể tính toán nó từ các state hay props khác trong component cuả bạn không? nếu có thì nó không phải là state.
9999

100100
Danh sách gốc của sản phẩm được truyền vào thông qua props, vậy nó không phải state. Từ khoá tìm kiếm và checkbox có vẻ là state bởi vì chúng sẽ bị thay đổi và không thể tính toán dựa trên phần còn lại. Cuối cùng, danh sách phân loại sản phẩm không phải là state bởi vì nó có thể được tìm ra dựa vào danh sách gốc với từ khoá tìm kiếm và giá trị của checkbox.
101101

102102
Cuối cùng, state của chúng ta là:
103103

104-
* Từ khoá tìm kiếm người dùng nhập vào
105-
* Giá trị của checkbox
104+
* Từ khoá tìm kiếm người dùng nhập vào
105+
* Giá trị của checkbox
106106

107107
## Bước 4: Xác định state của bạn ở đâu {#step-4-identify-where-your-state-should-live}
108108

@@ -114,16 +114,16 @@ Lưu ý: React truyền dữ liệu một chiều xuống trong hệ thống ph
114114

115115
Cho mỗi phần của state trong ứng dụng của bạn:
116116

117-
* Xác định tất cả các component sẽ hiển thị dựa trên state.
118-
* Tìm ra một component cha ( component ở phía trên các component cần state ở trong hệ thống phân chia cấp bậc).
119-
* Hoặc là component cha hay component khác ở phía trên nên giữ state.¨
120-
* Nếu bạn không thể tìm ra component hợp lí, thì hãy tạo ra một component mới nắm giữ state và thêm nó vào trong hệ thông phân chia cấp bậc ở phía trên component cha.
117+
* Xác định tất cả các component sẽ hiển thị dựa trên state.
118+
* Tìm ra một component cha ( component ở phía trên các component cần state ở trong hệ thống phân chia cấp bậc).
119+
* Hoặc là component cha hay component khác ở phía trên nên giữ state.¨
120+
* Nếu bạn không thể tìm ra component hợp lí, thì hãy tạo ra một component mới nắm giữ state và thêm nó vào trong hệ thông phân chia cấp bậc ở phía trên component cha.
121121

122122
Hãy cùng điểm lại kế hoạch cho ứng dụng của chúng ta:
123123

124-
* `ProductTable` cần để lọc danh sách các sản phẩm dựa trên state và `SearchBar` cần hiển thị từ khoá tìm kiếm và state đã được lựa chọn.
125-
* Component cha là `FilterableProductTable`.
126-
* Theo lí thuyết thì từ khoá tìm kiếm và giá trị lưạ chọn nên nằm trong `FilterableProductTable`.
124+
* `ProductTable` cần lọc danh sách các sản phẩm dựa trên state và `SearchBar` cần hiển thị từ khoá tìm kiếm và state đã được lựa chọn.
125+
* Component cha là `FilterableProductTable`.
126+
* Theo lí thuyết thì từ khoá tìm kiếm và giá trị lưạ chọn nên nằm trong `FilterableProductTable`.
127127

128128
Vậy chúng ta đã quyết định rằng state của chúng ta sẽ nằm trong `FilterableProductTable`. Đầu tiên, thêm một thuộc tính của instance `this.state = {filterText: '', inStockOnly: false}` vào hàm khởi tạo của `FilterableProductTable` để khai báo trạng thái ban đầu của ứng dụng. Sau đó, truyền các tham số `filterText``inStockOnly` tới `ProductTable``SearchBar` như là một prop. Cuối cùng, sử dụng những props này để lọc những hàng ở trong `ProductTable` và gán những giá trị vào các trường của form trong `SearchBar`.
129129

0 commit comments

Comments
 (0)