2016-01-27 37 views
6

Trong nhiều ví dụ về Redux, SOME_ASYNC_ACTION_ERROR hoặc SOME_ASYNC_PENDING là các hành động được gửi đi để thao túng trạng thái toàn cầu. Tôi không thể nghĩ về một kịch bản mà nó sẽ có ý nghĩa cho một thành phần ban đầu được trả lại với một lỗi toàn cầu/tải/trạng thái chờ. Khi một thành phần bị hủy và được cập nhật, lỗi async đó sẽ cần phải được "xóa", làm cho nó có vẻ như thao tác với trạng thái địa phương của thành phần là là một lựa chọn tốt hơn.Ứng dụng so với trạng thái cục bộ trong redux

Xét này, những gì là thực hành tốt nhất để đối phó với tải/lỗi/cấp phát tiểu bang ở Redux:

  • nên một mặc định thành phần đến một trạng thái ban đầu tại địa phương nhưng vẫn đăng ký vào trạng thái ứng dụng toàn cầu cho tải/lỗi ?
  • HOẶC Đơn đăng ký lỗi/tải có được đặt lại sau khi rời khỏi thành phần không?
  • HOẶC Các trạng thái tạm thời này có được quản lý cục bộ không?

Trả lời

4

Từ hiểu biết của tôi, cách tốt nhất trong Redux là luôn lưu trữ ứng dụng trong cửa hàng toàn cầu, nhưng sau đó có các thành phần riêng lẻ của bạn chỉ đăng ký thông tin có liên quan từ cửa hàng đó, sử dụng connect(mapStateToProps)(Component). Vì vậy, thay vì phải một thế giới bất động sản ứng dụng loading, thành phần riêng lẻ của bạn sẽ đăng ký vào lá cờ có liên quan, chẳng hạn như users.loading

Xem http://rackt.org/redux/docs/basics/UsageWithReact.html để biết thêm

EDIT: Để trả lời thêm câu hỏi của bạn, mỗi hành động nên dọn dẹp sau khi bản thân bằng cách gửi một hành động khác. Vì vậy, bạn có thể có REQUEST_USER để thêm cờ tải và đặt lại trạng thái lỗi, theo sau là RECEIVE_USER, loại bỏ cờ tải hoặc FAILED_TO_RECIEVE_USER, loại bỏ cờ tải, nhưng thêm trạng thái lỗi. Mẫu này được mô tả khá kỹ ở đây: https://github.com/agraboso/redux-api-middleware#redux-standard-api-calling-actions

+1

Đúng, tất cả điều này giả định rằng 'kết nối' đang được sử dụng để ánh xạ trạng thái ứng dụng thích hợp cho thành phần - tôi nên đã xác định điều đó. Vấn đề vẫn còn w/các trạng thái lỗi/đang chờ xử lý. – Whoa

+1

Tôi đã chỉnh sửa câu trả lời ở trên để giải thích thêm một chút, tôi nên giải quyết vấn đề đó để bắt đầu với – Aaron

+3

Và ... nếu bạn không nghĩ trạng thái "lỗi" sẽ tồn tại sau khi một thành phần chưa được lắp, thì bạn cần phải xem xét tại hành động làm cho cửa hàng Redux cập nhật, điều này đã làm cho React re-render khiến cho thành phần của bạn bị ngắt kết nối. Các thành phần của bạn không đi và tự ngắt kết nối mà không có lý do gì. Họ làm điều đó bởi vì các cửa hàng Redux đã được sửa đổi do một hành động. Nhiều khả năng bạn cần một bộ giảm tốc cho hành động đó để xóa trạng thái lỗi ngoài bất kỳ điều gì khác. – Brandon

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