Các quy trình chạy trong thời gian dài nên "sống" trong ứng dụng phản ứng + redux ở đâu?Các quy trình chạy dài ở đâu trong ứng dụng React + Redux?
Đối với một ví dụ đơn giản, hãy xem xét một lớp mà gửi và nhận tin nhắn qua một WebSocket:
class WebsocketStreamer {
sendMessage(message) {
this.socket.send(…);
}
onMessageReceive(event) {
this.dispatch({
type: "STREAMER_RECV",
message: event.data,
})
}
}
Làm thế nào nên vòng đời của lớp này được quản lý?
bản năng đầu tiên của tôi là để giữ nó trên store
:
var stores = {
streamer: function(state={}, action) {
if (action.type == "@@INIT")
return { streamer: new WebsocketStreamer() }
if (action.type == "STREAMER_SEND")
state.streamer.sendMessage(action.message)
return state;
}
}
Nhưng, ngoài việc là một chút lạ, cũng không có cách nào cho WebsocketStreamer
để có được quyền truy cập vào các dispatch()
chức năng, và nó phá vỡ nóng tải lại.
Một giải pháp tiềm năng là để giữ nó trong một nơi toàn cầu:
const streamer = new WebsocketStreamer();
Nhưng điều đó có ý nghĩa testability rõ ràng, và ngắt nóng tải lại quá.
Vậy, quy trình chạy dài trong một ứng dụng phản ứng + redux ở đâu?
Lưu ý: Tôi nhận thấy rằng ví dụ đơn giản này có thể được xây dựng chỉ với các cửa hàng + nhà cung cấp hành động. Nhưng tôi đặc biệt muốn biết các quy trình tồn tại lâu dài nên tồn tại trong những tình huống mà chúng tồn tại.
Chris, tôi thấy rằng việc lưu trữ ứng dụng Pusher trong kho lưu trữ Redux gây ra rất nhiều vấn đề với tải lại nóng. Bạn đã trải qua/vượt qua điều đó chưa? –
Tôi không thể nói chuyện đó, Steven. Tôi đã không sử dụng bất cứ điều gì như thế này bằng chứng về giai đoạn khái niệm. –