发送后如何更新状态

时间:2017-11-11 06:59:57

标签: react-native redux react-redux

我是react-native和redux的新手,我想知道如何在发送后更新状态......

按照我的代码:

/LoginForm.js

function mapStateToProps(state) { return { user: state.userReducer }; }

function mapDispatchToProps(dispatch) {
  return {
    login: (username, password) => {      
      dispatch(login(username, password)); // update state loggedIn
    }
  }  
}

const LoginForm = connect(mapStateToProps, mapDispatchToProps)(Login);
export default LoginForm;

/Login.js ---这里我有一个调用此方法的按钮loginOnPress()

loginOnPress() {
    const { username, password } = this.state;
    this.props.login(username, password);
    console.log(this.props.user.loggedIn)
  }

根据我上面的代码,我首先调用方法'this.props.login(用户名,密码);'调用调度并更改状态' loggedIn ”。

之后我尝试更新状态,但没有成功:

console.log(this.props.user.loggedIn)

注意:当我第二次点击此按钮时,状态会更新

2 个答案:

答案 0 :(得分:2)

调用调度会立即更新状态,但稍后会更新您的组件,以便您可以使用componentWillReceiveProps对道具中的更改做出反应,您可以查看here以获得更好的效果解释状态变化如何在React中起作用

答案 1 :(得分:1)

函数this.props.login(username, password)在redux-state上调度登录操作。

启动store.getState()确实会在更新后立即让你获得redux-state状态,但通常,由于 redux connect 你真的不需要这样做strong>包装组件的功能。

redux connect 功能会使用新道具更新您的组件,因此您通常会做的是" catch" react lifecycle的以下功能之一的这些更改:

class Greeting extends React.Component {

  ...

  loginOnPress () {
    const { username, password } = this.state;
    this.props.login(username, password);
  }

  // before the new props are applied

  componentWillReceiveProps (nextProps) {
    console.log(nextProps.user.loggedIn)
  }

  // just before the update

  componentWillUpdate (nextProps, nextState) {
    console.log(nextProps.user.loggedIn)
  }

  // immediately after the update

  componentDidUpdate (prevProps, prevState) {
    console.log(this.props.user.loggedIn)
  }

  render() {
    ...
  }
}