2016-08-09 25 views
6

Tôi đang sử dụng ReactJ với Redux và trên một số hướng dẫn và mã tôi thấy mọi người đề xuất và sử dụng normalizr để giữ trạng thái phẳng. Nhưng lợi thế thực sự trong việc giữ nó bằng phẳng là gì? Tôi có gặp phải bất kỳ vấn đề nào nếu tôi không? Có cần thiết không?Tại sao tôi nên giữ trạng thái phẳng

Trả lời

6

Ba lý do chính:

  • nhật lồng nhau Javascript đối tượng bất biến thường kết quả trong mã xấu xí đó là khó khăn hơn để duy trì, trừ khi bạn sử dụng một thư viện tiện ích để kết thúc quá trình
  • bất biến cập nhật dữ liệu lồng nhau đòi hỏi bạn trả về các bản sao mới của tất cả các mục trong hệ thống phân cấp lồng nhau. Vì các thành phần thường làm so sánh tham chiếu nông bình đẳng trên dữ liệu để xem liệu chúng có cần cập nhật hay không, cập nhật dữ liệu lồng nhau thường có nghĩa là nhiều đối tượng được cập nhật và nhiều thành phần hơn có thể sẽ phải trả lại ngay cả khi dữ liệu thực tế không khác.
  • Dữ liệu phẳng và dữ liệu chuẩn hóa cụ thể, cho phép một số phương pháp tối ưu hóa hơn để xác định thành phần (chẳng hạn như danh sách mà mỗi thành phần mục danh sách được kết nối với nhau, cung cấp ID mặt hàng làm trụ cột và chịu trách nhiệm tự tìm kiếm dữ liệu của mục theo ID đó)
+1

cảm ơn rất nhiều cho câu trả lời tuyệt vời của bạn. nó hoàn toàn thuyết phục tôi và giúp tôi hiểu nó tốt hơn :) –

6

Tôi giả định rằng bằng cách giữ cho phẳng, bạn có nghĩa là không làm tổ trong đối tượng trạng thái của bạn.
Bạn không nên làm tổ trong tiểu bang của mình vì bạn phải tiếp tục thay đổi trạng thái của mình theo một số sự kiện.
Nếu bạn xem tài liệu redux, họ muốn bạn có bộ giảm tốc thuần túy. Và một phần làm cho chức năng của bạn trở nên tinh khiết không thay đổi đối số của nó.
Khi bạn có rất nhiều lồng ghép, thật khó thay đổi trạng thái mà không vô tình sửa đổi đối tượng trạng thái vì tất cả các đối tượng JS được truyền qua tham chiếu. Khi bạn có nhiều lồng nhau, bạn phải tạo các bản sao sâu của đối tượng trạng thái trước khi sửa đổi nó.

+0

Cảm ơn rất nhiều! bây giờ tôi không thể tưởng tượng không làm phẳng trạng thái của tôi :) –

Các vấn đề liên quan