Lưu ý: Tôi đã đọc các tài liệu cho Redux (Baobab cũng vậy) và tôi đã thực hiện một phần chia sẻ công bằng về Google và thử nghiệm.
Tại sao nó được đề xuất mạnh mẽ rằng một ứng dụng Redux chỉ có một cửa hàng?
Tôi hiểu những ưu / nhược điểm của thiết lập một cửa hàng so với thiết lập nhiều cửa hàng ( Có nhiều câu hỏi và trả lời về SO về chủ đề này ).
IMO, quyết định kiến trúc này thuộc về các nhà phát triển ứng dụng dựa trên nhu cầu của dự án của họ. Vậy tại sao nó lại được đề xuất mạnh mẽ cho Redux, gần như đến mức nghe có vẻ bắt buộc ( mặc dù không có gì ngăn cản chúng tôi làm nhiều cửa hàng )?
EDIT: phản hồi sau khi chuyển đổi sang một cửa hàng
Sau một vài tháng làm việc với redux về những gì nhiều người sẽ coi là một SPA phức tạp, tôi có thể nói rằng cấu trúc cửa hàng duy nhất là một niềm vui thuần túy để làm việc.
Một vài điểm có thể giúp người khác hiểu tại sao một cửa hàng so với nhiều cửa hàng là một câu hỏi tranh luận trong nhiều trường hợp sử dụng:
- thật đáng tin cậy : chúng tôi sử dụng các công cụ chọn để tìm hiểu trạng thái ứng dụng và thu được thông tin liên quan đến ngữ cảnh. Chúng tôi biết rằng tất cả các dữ liệu cần thiết là trong một cửa hàng duy nhất. Nó tránh tất cả các câu hỏi về vấn đề nhà nước có thể được.
- thật nhanh : cửa hàng của chúng tôi hiện có gần 100 hộp giảm tốc, nếu không muốn nói là nhiều hơn. Ngay cả ở số đó, chỉ một số ít bộ giảm tốc xử lý dữ liệu trên bất kỳ công văn nào, những cái khác chỉ trả về trạng thái trước đó. Lập luận rằng một cửa hàng khổng lồ / phức tạp ( nbr của bộ giảm tốc ) chậm là khá nhiều. Ít nhất chúng tôi đã không thấy bất kỳ vấn đề hiệu suất đến từ đó.
- gỡ lỗi thân thiện : mặc dù đây là một lập luận thuyết phục nhất để sử dụng toàn bộ redux, nhưng nó cũng dành cho một cửa hàng so với nhiều cửa hàng. Khi xây dựng một ứng dụng bạn nhất định có lỗi trạng thái trong quy trình ( lỗi lập trình viên ), điều đó là bình thường. PITA là khi các lỗi đó mất hàng giờ để gỡ lỗi. Nhờ vào một cửa hàng duy nhất ( và redux-logger ), chúng tôi chưa bao giờ dành quá vài phút cho bất kỳ vấn đề nào của nhà nước.
một vài gợi ý
Thách thức thực sự trong việc xây dựng cửa hàng redux của bạn là khi quyết định cách cấu trúc nó. Thứ nhất, vì thay đổi cấu trúc xuống đường chỉ là một nỗi đau lớn. Thứ hai, bởi vì phần lớn quyết định cách bạn sẽ sử dụng và truy vấn dữ liệu ứng dụng của bạn cho bất kỳ quy trình nào. Có rất nhiều gợi ý về cách cấu trúc một cửa hàng. Trong trường hợp của chúng tôi, chúng tôi thấy sau đây là lý tưởng:
{
apis: { // data from various services
api1: {},
api2: {},
...
},
components: {} // UI state data for each widget, component, you name it
session: {} // session-specific information
}
Hy vọng thông tin phản hồi này sẽ giúp đỡ người khác.
EDIT 2 - công cụ lưu trữ hữu ích
Đối với những người bạn đã tự hỏi làm thế nào để "dễ dàng" quản lý một cửa hàng , điều này có thể nhanh chóng trở nên phức tạp. Có một công cụ giúp cô lập các phụ thuộc cấu trúc / logic của cửa hàng của bạn.
Có Normalizr chuẩn hóa dữ liệu của bạn dựa trên lược đồ. Sau đó, nó cung cấp một giao diện để làm việc với dữ liệu của bạn và tìm nạp các phần khác của dữ liệu của bạn id
, giống như một Từ điển.
Không biết bình thường vào thời điểm đó, tôi đã xây dựng một cái gì đó dọc theo cùng một dòng. quan hệ-json lấy một lược đồ và trả về giao diện dựa trên Bảng ( giống như một cơ sở dữ liệu ). Ưu điểm của mối quan hệ-json là cấu trúc dữ liệu của bạn tự động tham chiếu các phần khác của dữ liệu của bạn ( về cơ bản, bạn có thể di chuyển dữ liệu của mình theo bất kỳ hướng nào, giống như các đối tượng JS bình thường ). Nó không chín chắn như Normalizr, nhưng tôi đã sử dụng nó thành công trong sản xuất vài tháng nay.