Dva: setState之后立即调用dispatch, setState失效

Created on 8 May 2017  ·  4Comments  ·  Source: dvajs/dva

1.目的:
点击按钮后, 想把按钮设置为loading状态, 并记录下点击按钮的时间.
然后, dispatch一个action, 用来异步请求数据.数据拿到后, 可将按钮的loading状态取消
代码如下:

handleBtnClick = ()=>{
  this.setState({
  btnLoading:true,
  startTime:new Date()
});
  this.props.dispatch({
    type: 'someEffect',
    payload:{...}
    })
}

实际发现, dispatch后, 之前的setState操作没有作用.
2.调试:

  • 将dispatch注释掉, setState就有效了.
  • .将setState放到dispatch后面, 仍旧无效

看上去是dispatch过程让setState无效了, 请大家提供下调试思路吧?
dispatch在哪里调用比较合适?
@sorrycc

Most helpful comment

this.setState({}, () => {this.props.dispatch()}

All 4 comments

用redux Devtool看下someEffect是否改了同个state

this.setState({}, () => {this.props.dispatch()}

@nihgwu 感谢 ,用你的方法完美解决.

@nihgwu 谢谢~解决了问题,大神知道为什么把setstate放在dispatch前面会这样么?

Was this page helpful?
0 / 5 - 0 ratings