如题,我在一个方法里面多次dispatch action:
onChange = ( value1 , value2 ){
dispatch( { action: 'action1' , value1 } )
dispatch( { action: 'action2' , value2 } )
}
render会触发两次吗?
我实际实验了一下,发现是一次render,请问下是react-redux做了优化吗?还是setState的机制?
如题,我在一个方法里面多次dispatch action:
onChange = ( value1 , value2 ){
dispatch( { action: 'action1' , value1 } )
dispatch( { action: 'action2' , value2 } )
}
render会触发两次吗?
我实际实验了一下,发现是一次render,请问下是react-redux做了优化吗?还是setState的机制?
嗯嗯,就是思想方法吧,也不是具体的业务代码。
就是一次dispatch,view更新一次,继续dispatch,view继续更新。两次dispatch,会不会view就更新一次,把两次dispatch的结果合并到一次,一次性更新view,提高性能?
一次dispatch,一次reducer,这两个是严格对应的关系。但是不一定会触发view的更新。你是使用的react-redux
来链接redux
和react
的吗?在react-redux
的connect
组件里,是判定了shouldComponentUpdate
的。对应的props如果没有变化,是不会触发view的更新的。
你可以简单的理解为,使用了redux
,react-redux
后,只有你组件用到的props有了变化,组件的view才会更新。
你上边的两个action都改变了同一个数据吗?或者说你的action都会导致组件用到的props有变化吗?
是的,我是用redux和react-redux的connec连接的。
代码里,productValue
和responsorValue
是两个input的value值,两次dispatch,确实render了一次。而且我用immutablejs的,每次返回的都是新的state,可以确定,每次dispatch,都是不一样的state的。
render的触发是取决于 store 的变化(换一个直接点在说法,reducer 里面的有return新的state就会触发render ),而不是有触发action就触发render。
同问关于react-redux关于多次render在招式。
抱歉之前不了解在react-redux下组件的更新机制。我之前以为是检测到prop改变后,直接调用render方法。像 @wlt说的,重新render组件的方式是通过setState的话,就有可能造成只渲染一次。setsTate方法是异步的,而且会累积更新,不会每次都更新。如果你的两个value,其中一个会被马上被另一个覆盖掉。你可以试一下,取最终的一个值,然后dispatch。