reactjs – React和Flux:“在调度中间调度”以显示来自API调用
我使用Flux,React和我有组件简单和消息:
>简单:它是一个通过Action调用API的简单组件. Action执行ajax请求并在jqXHR.done()中调度结果.简单有一个更改侦听器等待调度结果.如果结果为null,我想使用我的Messages组件显示错误,所以我调用了MessagesAction.addError(‘我的结果是null’). 当我收到null结果并立即调用Simple组件内的MessagesAction.addError时,会出现问题.事实上,我知道这可能会导致“在调度中间发送”错误,但我不知道如何重构此代码以显示使用Flux的错误消息. 免责声明1:我无法使用setTimeout函数来解决此问题.这不是正确的解决方案. 免责声明2:Simple组件代表app中的任何其他组件,它也将使用Messages组件显示消息. 简单代码: findUser: function (value) { UserAction.find(value); },componentDidMount: function () { UserStore.addChangeListener(this.updateUser); },updateUser: function(){ var user = UserStore.getUser(); if (user == null){ MessagesAction.addError('My result is null!'); //here occur the error! } else { //set my user with setState } }, 消息代码: componentDidMount: function () { MessagesStore.addChangeListener(this.addMessage); },addMessage: function () { this.setState({ messages: MensagensStore.getMessages() }); }, 谢谢!
好吧,问题是(至少在Facebook的Dispatcher实现中)你不能在商店回调中触发任何动作,这会导致不希望的/不可预测的行为,如无限调度或不一致的状态变化(例如竞争条件).这是由于单个广播调度员的性质.
IMHO最干净的解决方案(没有闻到waitFor())是在触发组件中引入内部状态.使用状态可以在下一个更新周期中触发消息操作.这样,您就不会遇到未完成调度的问题. // your component's implementation getInitialState : function(){ return { user : undefined }; } componentWillMount: function () { UserStore.addChangeListener(this.updateUser); },componentWillUnmount: function () { UserStore.removeChangeListener(this.updateUser); },componentDidUpdate : function(){ if(this.state.user == null){ MessagesAction.addError('My result is null!'); // no error anymore! } },updateUser: function(){ this.setState({ user: UserStore.getUser(); }); }, (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ios – 将’NSNumber’桥接到’Int’警告
- React Native 初尝试之 CNode 社区客户端开发
- vb.net – 在连接数据库时正确声明ConfigurationManager
- ruby-on-rails – 测试:在anaf中的reject_if
- cocos2dx-3.2 3DAction 一些3D特效
- cocos2d-lua敏感词过滤函数
- The content of elements must consist of well-formed cha
- ReactiveCocoa,最受欢迎的iOS函数响应式编程库(2.5版),没有
- ajax异步获取数据,动态添加select标签中的option
- 常用正则表达式大全,手机、电话、邮箱、身份证(最严格的验