Redux 的异步Action中,如何回调页面中的交互

如题:这样一个交互,在一个表单异步提交成功完后,希望清空页面上的表单控件;1.表单信息都是存在storepostDraft中,初始化进入时反向渲染,页面如下:
constructor(props){
super(props);
this.state={
start:'',
end:'',
title:'',
content:'',
};
this.submit=this.submit.bind(this);
this.handleChange=this.handleChange.bind(this);
}
...
componentWillMount(){
const{postInfo:{postDraft}}=this.props;
this.setState(postDraft);
}
表单提交成功后清空,action代码如下:
exportfunctionsubmitMeeting(meetingInfo){
return(dispatch,getState)=>{
if(shouldPost(getState().meeting)){
returnconsole.log('已经在申请会议中');
}
dispatch(startPost());
returnnewPromise((rev)=>{//模拟ajax
setTimeout(()=>{
rev();
},1500);
}).then(()=>{
dispatch(endPost());
dispatch(addMeeting(meetingInfo));
dispatch(clearMeeting());//清空store中的postDraft字段
},()=>{
dispatch(endPost());
});
};
}
现在遇到的问题是,在提交成功后stroe里面的postDraft字段已经被清空,但是前端页面表单里面还是有数据的。分析是因为页面本地的state没有和store中的数据反向同步,对于这个问题一直没有特别好的方案:
action中的没有直接调前端页面的清空函数,如submitMeeting(meeting,clearCallback);这个clearCallback调用前端页面的清空函数;
在页面componentWillReceiveProps中检测store中的数据变化,一旦postDraft字段清空了,就调用前端页面的clearCallback;但是这个方案出发不稳定,会在表单为空的时候也会触发;
请问对于这个问题,麻友们一般是怎么处理;感谢
眼眸繁星
浏览 654回答 2
2回答

三国纷争

其实只要判断postDraft是否处于从不为空到为空的转变期间就好了。也就是说,要在componentWillReceiveProps中,判断this.props.postDraft不为空,且nextProps.postDraft为空。则执行清空函数。

有只小跳蛙

react+redux并非是通过回调组件中的函数来实现更新的。如果是使用的原生redux,那么需要在组件中订阅store,也就是store.describe方法,一般是在DidMount或者DidUpdate中注册。这个函数中就包含了一个回调函数,用于组件在store中数据更新后进行响应式的处理。不知道你的代码是不是缺了这一环节。然后,一般在react中使用redux的技术栈会使用react-redux模块。如果使用这个模块,就不需要任何回调函数,store中的所有数据更新都能通过props响应到组件上。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript