【发布时间】:2016-11-01 20:36:29
【问题描述】:
有人可以告诉我如何使用 react-redux 执行以下操作:
组件 A 调度更新状态的操作(异步)
组件 B(不是 A 的子组件)需要能够检测到状态何时发生变化并调度另一个动作。
我的问题是当我尝试在组件 B 中执行调度操作 2 时,状态仍处于初始状态并且没有更新。
我也尝试在 componentWillUpdate 中调度动作 2,但是,这会创建一个无限循环,因为第二个动作也会更新状态(并且也是异步的)
或多或少是这样的:
//----- Component A
class ComponentA extends React.Component {
constructor(props) {
super(props);
this.props.dispatch(loadEvents()); // loadEvents is async and will update state.eventsState
}
}
const mapStateToProps = function (state) {
return {
eventsState: state.eventsState,
};
};
export default connect(mapStateToProps)(ComponentA);
//----- Component B
class ComponentA extends React.Component {
constructor(props) {
super(props);
props.dispatch(getEventUsers(props.eventsState.eventId)); // the eventsState is in initial state here (empty)...where do I call getEventUsers?
}
componentWillUpdate(nextProps) {
nextProps.dispatch(getEventUsers(props.eventsState.eventId)) // Creates an infinite loop, getEventUsers also updates state
}
}
const mapStateToProps = function (state) {
return {
eventsState: state.eventsState,
};
};
export default connect(mapStateToProps)(ComponentA);
【问题讨论】:
-
组件 B 应该只考虑开始加载和完成加载之间的时间。它可以显示一个微调器或什么都没有(空 div)。即使您的
loadEvents减速器是同步的,也不能保证它首先被调度。 React 独自决定何时调用各种函数,例如shouldComponentUpdate,甚至是你的组件构造函数。
标签: reactjs redux react-redux