Tôi đang xây dựng một ứng dụng Flux bằng MartyJS (khá gần với "vanilla" Flux và sử dụng cùng một điều phối cơ bản). Nó chứa các cửa hàng với một mối quan hệ phụ thuộc vốn có. Ví dụ: UserStore
theo dõi người dùng hiện tại và InstanceStore
theo dõi các phiên bản dữ liệu do người dùng hiện tại sở hữu. Dữ liệu cá thể được lấy từ một API không đồng bộ.AJAX trong thông lượng: Làm mới các cửa hàng khi thay đổi trạng thái phụ thuộc
Câu hỏi đặt ra là phải làm gì với trạng thái của InstanceStore
khi người dùng thay đổi.
Tôi đã tin tưởng (ví dụ đọc câu trả lời của @fisherwebdev trên SO) rằng nó phù hợp nhất để thực hiện các yêu cầu AJAX trong chức năng tạo tác vụ và có kết quả AJAX "thành công" trong một hành động. cửa hàng để thay đổi.
Vì vậy, để tìm nạp người dùng (tức là đăng nhập), tôi đang thực hiện cuộc gọi AJAX trong chức năng tạo tác vụ và khi giải quyết, tôi sẽ gửi một hành động RECEIVE_USER
với người dùng dưới dạng tải trọng. Các UserStore
lắng nghe điều này và cập nhật trạng thái của nó cho phù hợp.
Tuy nhiên, tôi cũng cần phải tìm nạp lại tất cả dữ liệu trong InstanceStore
nếu người dùng bị thay đổi.
Lựa chọn 1: Tôi có thể nghe RECEIVE_USER
trong InstanceStore
, và nếu nó là một người dùng mới, kích hoạt một yêu cầu AJAX, do đó tạo ra một hành động, nó sẽ gây ra các InstanceStore
để cập nhật. Vấn đề với điều này là nó cảm thấy giống như các hành động xếp tầng, mặc dù về mặt kỹ thuật nó không đồng bộ nên người điều phối có lẽ sẽ cho phép nó.
Lựa chọn 2: Một cách khác sẽ cho InstanceStore
lắng nghe để thay đổi các sự kiện được phát ra bởi UserStore
và làm điệu nhảy yêu cầu hành động đó, nhưng điều này cảm thấy sai lầm quá.
Tùy chọn 3: Cách thứ ba là để người tạo hành động dàn xếp hai cuộc gọi AJAX và gửi hai hành động riêng biệt. Tuy nhiên, bây giờ người tạo hành động phải biết rất nhiều về cách các cửa hàng liên quan đến nhau.
Một trong những câu trả lời trong Where should ajax request be made in Flux app? làm cho tôi nghĩ tùy chọn 1 là đúng, nhưng tài liệu thông lượng cũng ngụ ý rằng các cửa hàng kích hoạt hành động không tốt.
Lý do cho hai cửa hàng là tất cả các dữ liệu được gắn với người sử dụng bằng cách nào đó (các dữ liệu cơ bản là một đồ thị), do đó bạn có kết thúc với một khổng lồ lấy ở đầu và một đơn , cửa hàng nguyên khối, hoặc bạn phải có phụ thuộc cửa hàng. – optilude