redux mapStateToProps调用ajax的空状态

时间:2016-08-19 04:44:52

标签: reactjs redux react-redux jsx

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

2 个答案:

答案 0 :(得分:0)

由于组件呈现非常依赖于ajax调用的用户数据,因此调度的正确位置为componentWillReceiveProps

如果您已将mapDispatchToProps回传传递给connect(),那么您应该可以在this.props.actions.anyAction()内致电componentWillReceiveProps

如果你在没有传递第二个参数(connect())的情况下调用mapDispatchToProps,那么你必须明确调用this.props.dispatch()

答案 1 :(得分:0)

我强烈建议将sagas用于异步任务。 有这个动作的传奇手表。 如果它看到一个,让它检查用户是否在商店。 如果他不在商店,请进行异步操作以获取它,将其添加到商店,然后重播上一个操作。