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
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 đó)
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ó.
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 :) –
- 1. REST: Tài nguyên ở trạng thái sai - Tôi nên trở về trạng thái HTTP nào?
- 2. Tôi nên giữ trạng thái lựa chọn cho danh sách ở đâu?
- 3. trạng thái git: UU là gì và tại sao nên thêm/rm sửa lỗi đó?
- 4. giữ trạng thái phân trang trên fnDraw()
- 5. Dịch vụ Góc có nên có trạng thái không?
- 6. tại sao thanh điều hướng của tôi ở dưới thanh trạng thái của tôi?
- 7. Tôi có nên lưu trữ tất cả dữ liệu trong trạng thái vuex
- 8. Tại sao display_errors thay đổi mã trạng thái HTTP?
- 9. Tôi có nên làm phẳng di chuyển Rails không?
- 10. StateT over Cont. Tại sao trạng thái của tôi không được đặt lại?
- 11. giữ trạng thái được chọn cho nút android
- 12. Trạng thái nào được giữ giữa các dòng JavaScript?
- 13. hoạt ảnh css3 giữ nguyên trạng thái ban đầu
- 14. Tại sao ColorAnimation cho trạng thái được kiểm tra không bền màu sau khi trạng thái MouseOver được kích hoạt?
- 15. Tại sao tôi nên sử dụng Socket.io?
- 16. (Tại sao) tôi nên sử dụng obfuscation?
- 17. Tại sao tôi nên học COM?
- 18. Tại sao tôi nên học haskell?
- 19. Tại sao tôi nên sử dụng glBindAttribLocation?
- 20. Trạng thái mức/trạng thái Pygame
- 21. Tại sao nên sử dụng Phiên để lưu trữ trạng thái trong các trang web lưu lượng truy cập cao?
- 22. Tôi nên lưu trữ trạng thái cấp trò chơi của mình ở đâu?
- 23. Tại sao tôi nên * không * ghi đè GetHashCode()?
- 24. Nhân bản trạng thái Lua
- 25. componentWillReceiveProps trạng thái khác với trạng thái hiển thị sau khi cập nhật trạng thái redux
- 26. Lucene.Net và trạng thái ủ
- 27. Tại sao tôi nên sử dụng LoadBalancerProbe thay vì đăng ký vào sự kiện RoleEnvironment.StatusCheck?
- 28. Tại sao ba trạng thái luồng "chặn" trong Java nhưng chỉ có một trong C#?
- 29. Tại sao SQLAlchemy/mysql giữ thời gian cho tôi?
- 30. Tại sao trình giữ chỗ của tôi không hiển thị?
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 :) –