在redux中,如果特定的reducer状态发生变化,我想显示一个模态。仅在用户正在查看特定组件时才有意义。我使用了容器的mapDispatchToProps(publishState来自reducer):
const mapDispatchToProps = (stateProps, dispatchProps, ownProps) => {
const {dispatch} = dispatchProps;
const {appType, publishState, publishStages} = stateProps;
const isWebsite = (appType !== 'MOBILE');
switch (publishState.stage) {
case publishStages.GENERATING_BUILDREQUEST:
case publishStages.WAITING:
case publishStages.WORKING:
case publishStages.UPLOADING:
dispatch(showModal(modalTypes.PUBLISH_MODAL, {isWebsite}));
break;
case publishStages.COMPLETED:
dispatch(showModal(modalTypes.PUBLISH_SUCCESS_MODAL, {isWebsite}));
break;
case publishStages.ERROR:
dispatch(showModal(modalTypes.PUBLISH_FAILURE_MODAL, {isWebsite}));
break;
default:
dispatch(closeModal());
}
return {...
然而,这并不会让人觉得优雅,因为人们不会期望映射功能能够调整状态。任何想法如何正确实现这一点?
答案 0 :(得分:3)
我确实不会在mapDispatchToProps函数中调用dispatch。这个函数应该是“纯粹的”,只返回一个没有任何副作用的映射。
因为你知道什么动作应该触发模态,即。当publicStages
被设置为特定值时,我建议以两种可能的方式来改变状态:
publicStages
时,reducer也可以访问模态状态,并进行更改。 publicStages
的操作,调用操作以打开/关闭模式。请注意,调用dispatch应该是异步的。在这种情况下,您还需要从操作中调度,因此您必须将调度功能向下传递给操作。 编辑:按照评论中的讨论 - 以及完整性 - 如果模式仅作为一个可视组件的一部分显示,您还可以将其open/closed
状态存储在组件本身中并在{{ 1}}和componentWillMount
。关于Redux创作者Dan Abramov的有趣读物是You Might Not Need Redux