我正在创建一个带有flux体系结构的react.js应用程序,并试图找出应该在何时何地从服务器请求数据。这方面有什么例子吗。(不是TODO应用程序!)
我非常支持将异步写操作放在动作创建者中,将异步读操作放在存储中。目标是将存储状态修改代码保存在完全同步的操作处理程序中;这使它们易于推理,也便于单元测试。为了防止对同一端点的多个同时请求(例如,双重读取),我将把实际的请求处理移动到一个单独的模块中,该模块使用承诺来防止多个请求;例如:
类MyResourceDAO{
获取(id){
如果(!this.promises[id]){
this.promises[id]=新承诺((解决,拒绝)=>{
//这里的ajax处理。。。
});
}
归还这个。承诺[id];
}
}
虽然存储中的读取涉及异步函数,但有一个重要的警告,即存储不会在异步处理程序中更新自己,而是在响应到达时触发一个操作,并且仅触发一个操作。此操作的处理程序最终执行实际的状态修改
例如,组件可能会执行以下操作:
getInitialState(){
返回{data:myStore.getSomeData(this.props.id)};
}
存储将实现一种方法,可能是这样的:
类存储{
getSomeData(id){
如果(!this.cache[id]){
get(id).then(this.updateFromServer);
this.cache[id]=正在加载\u令牌;
//加载令牌是某种唯一的值
//组件可以用来知道
//值还不可用。
}
返回此.cache[id];
}
updateFromServer(响应){
fluxDispatcher.dispatch({
键入:“来自服务器的数据”,
有效负载:{id:response.id,数据:response}
});
}
//这将处理“来自服务器的数据”操作
handleDataFromServer(操作){
this.cache[action.payload.id]=action.payload.data;
this.emit(“change”);//或您为重新呈现应用程序所做的任何操作
}
}