反应原生redux加载状态顺序

时间:2018-04-26 08:17:29

标签: reactjs react-native redux react-redux

我希望getKey函数等待来自friendExist的更新状态。 目前,getKey设置为false作为初始状态,但friendExist应将布尔值设置为" true"。但似乎" this.props.getKey(this.props.exist)"等待" this.props.friendExist(uid)"在运行代码之前进行更新。

componentDidMount(){
 const uid = 'MZdKuFpGmGRntb0nyF4PO0f6kco1';
 this.props.friendExist(uid);
 //friendExist should update this.props.exist to true 
 this.props.getKey(this.props.exist)
}

friendExist和getKey都是分派新状态的动作。

2 个答案:

答案 0 :(得分:0)

我假设您正在使用react-redux mapStateToProps()来获取更新状态。这种行为是预期的,因为react-redux在内部使用反应的setState(),这是异步的,这意味着你的状态可能不会在你分派动作的同时映射到道具。

我建议创建一个函数getKeyIfFriendExist(),它可以调度和检查里面的最新状态。

答案 1 :(得分:0)

您的函数componentDidMount是一个同步函数,因此它将在代码内执行而无需等待任何不相关的函数。除非您将其类型更改为异步,并准确告诉您希望它等待的方式,否则this.props.exist在执行this.props.getKey时永远不会成立。

另一种更简单的解决方案是在this.props.exist更新componentWillReceiveProps,然后在其中执行this.props.getKey

componentDidMount(){
 const uid = 'MZdKuFpGmGRntb0nyF4PO0f6kco1';
 this.props.friendExist(uid);
}

componentWillReceiveProps(nextProps, nextState) {
  if (nextProps.exist) {
    this.props.getKey(nextProps.exist)
  }
}