我正在构建一个react&redux应用程序,并且遇到了以下问题:在我的一个组件中,我想通过编程导航到另一个页面,并显示一个模式。
我发现在我的应用程序中使用两次操作并不能很好地工作,因为状态被更新了两次(导致我的模式渲染了两次,这会导致它消失)。
因此,我尝试使用redux-batched-actions来更新一次状态,方法是使用两个函数("push“和"openModal”类型的操作)调用batchActions。但是由于某些原因,在batchActions中调用"push“并不起作用。示例:
import { push } from 'react-router-redux';
import { batchActions } from 'redux-batched-actions';
myFunction: function() {
this.props.newPath("/mypath");
}
const mapDispatchToProps = (dispatch) => {
return {
newPath: (path) => dispatch(batchActions([push(path)])),
}
}分派推送操作本身工作得很好,如下所示:
newPath: (path) => dispatch(push(path))并且,在batchAction works中分派模态操作:
newPath: (path) => dispatch(batchActions([displayModal("title", "message"]))因此,由于某种原因,batchActions似乎无法识别“推送”操作,而我不知道为什么。
有人能理解为什么batchActions不能正确处理“推”操作吗?
问候
发布于 2017-08-15 16:15:31
react-router-redux push操作由routerMiddleware处理。routerMiddleware仅根据类型查找特定于路由器的操作。另一方面,redux-batched-actions使用特殊的for redux-batched-actions类型将两个或多个动作包装在一个复合动作中。因此,当此操作通过中间件并且没有发生路由更改时,routerMiddleware不会将其识别为路由器操作。
在https://github.com/ReactTraining/react-router/issues/5227中有一个描述问题的问题。
解决方案:
还有另一个包可以与react-redux-router一起用于批处理操作:react-batch-enhancer。它在一个中间件级别上工作,因此底层的批处理操作将由相应的中间件处理。
https://stackoverflow.com/questions/42385086
复制相似问题