为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

眼眸繁星 2019-05-24 10:56:13
如题:这样一个交互,在一个表单异步提交成功完后,希望清空页面上的表单控件;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)=>{//模拟ajaxsetTimeout(()=>{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;但是这个方案出发不稳定,会在表单为空的时候也会触发;请问对于这个问题,麻友们一般是怎么处理;感谢
查看完整描述

2 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

其实只要判断postDraft是否处于从不为空到为空的转变期间就好了。
也就是说,要在componentWillReceiveProps中,判断this.props.postDraft不为空,且nextProps.postDraft为空。则执行清空函数。
                            
查看完整回答
反对 回复 2019-05-24
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

react+redux并非是通过回调组件中的函数来实现更新的。
如果是使用的原生redux,那么需要在组件中订阅store,也就是store.describe方法,一般是在DidMount或者DidUpdate中注册。这个函数中就包含了一个回调函数,用于组件在store中数据更新后进行响应式的处理。不知道你的代码是不是缺了这一环节。
然后,一般在react中使用redux的技术栈会使用react-redux模块。如果使用这个模块,就不需要任何回调函数,store中的所有数据更新都能通过props响应到组件上。
                            
查看完整回答
反对 回复 2019-05-24
  • 2 回答
  • 0 关注
  • 653 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信