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
@@ -43,21 +43,21 @@ Vì mô hình dữ liệu thường hiển thị dưới dạng chuỗi JSON, n
43
43
44
44
Có năm component trong ứng dựng, dữ liệu mà component hiển thị sẽ được in nghiêng
45
45
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
51
51
52
52
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 đề.
53
53
54
54
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:
55
55
56
-
*`FilterableProductTable`
57
-
*`SearchBar`
58
-
*`ProductTable`
59
-
*`ProductCategoryRow`
60
-
*`ProductRow`
56
+
*`FilterableProductTable`
57
+
*`SearchBar`
58
+
*`ProductTable`
59
+
*`ProductCategoryRow`
60
+
*`ProductRow`
61
61
62
62
## Bước 2: Xây dựng một bản tĩnh trong React {#step-2-build-a-static-version-in-react}
63
63
@@ -86,23 +86,23 @@ Có hai kiểu "mô hình" dữ liệu trong React: props và state. Hãy chắc
86
86
87
87
Suy tính về các thành phần dữ liệu trong ví dụ ứng dựng, nó bao gồm:
88
88
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
93
93
94
94
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:
95
95
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.
99
99
100
100
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.
101
101
102
102
Cuối cùng, state của chúng ta là:
103
103
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
106
106
107
107
## Bước 4: Xác định state của bạn ở đâu {#step-4-identify-where-your-state-should-live}
108
108
@@ -114,16 +114,16 @@ Lưu ý: React truyền dữ liệu một chiều xuống trong hệ thống ph
114
114
115
115
Cho mỗi phần của state trong ứng dụng của bạn:
116
116
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.
121
121
122
122
Hãy cùng điểm lại kế hoạch cho ứng dụng của chúng ta:
123
123
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`.
127
127
128
128
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` và `inStockOnly` tới `ProductTable` và `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`.
0 commit comments