在redux
中使用react
,如何从mapStateToProps
函数中调度操作?
class Example React.Component {
render(){return (
<div>
Hello {this.state.userData.name} <--
</div>)};
);
Example.propTypes = {
id: PropTypes.number.isRequired,
};
function select(state,ownProps) {
let userData = state.user[ownProps.id];
if(!userData){//if not already in store then i want to load it
///I WANT TO dispatch an action that load this user from server.
//dispatch({type:'LOAD_USER',id: ownProps.id});
}
return {
userData
};
}
export default connect(select)(Example);
//example usage <Example id="1" /> //should return state.user[1].name
答案 0 :(得分:0)
由于组件呈现非常依赖于ajax调用的用户数据,因此调度的正确位置为componentWillReceiveProps
。
如果您已将mapDispatchToProps
回传传递给connect()
,那么您应该可以在this.props.actions.anyAction()
内致电componentWillReceiveProps
。
如果你在没有传递第二个参数(connect()
)的情况下调用mapDispatchToProps
,那么你必须明确调用this.props.dispatch()
答案 1 :(得分:0)
我强烈建议将sagas用于异步任务。 有这个动作的传奇手表。 如果它看到一个,让它检查用户是否在商店。 如果他不在商店,请进行异步操作以获取它,将其添加到商店,然后重播上一个操作。