有人可以给我提供有关如何使用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);
答案 0 :(得分:3)
在不查看Redux代码的情况下,我说组件B在构造函数中获取空数据,因为它几乎在组件A的同时实例化,并且此时启动了异步请求by Component构造函数仍在进行中。
当异步请求完成时,您的Redux应该触发包含接收数据的操作。然后,您的reducer将这些数据置于状态,这反过来会改变连接组件的道具并迫使它们重新渲染。
只有在props.eventState.eventId存在且已更改时才应调度getEventUsers。