Реакция - ComponentDidMount не получает значение из состояния Redux - PullRequest
0 голосов
/ 03 сентября 2018

Я корректно обновляю состояние Redux. Вот что такое состояние Redux updateNeeded (в данном случае это правда). enter image description here

Я записываю в консоль значение this.props.mandatory_fields.updateNeeded, но я всегда задаю исходное состояние. Он не обновляется из Redux State. Ниже приведен код, где я делаю вызов API.

class CompleteProfile extends Component {
  state = {
    completeProfile: false,
  }

  componentDidMount = () => {
    let { dispatch, session } = this.props
    dispatch(getMandatoryFields(session.username))
    console.log(
      'this.props.mandatory_fields.updateNeeded -- ' +
        this.props.mandatory_fields.updateNeeded
    )
    if (this.props.mandatory_fields.updateNeeded !== false) {
      this.setState({
        completeProfile: this.props.mandatory_fields.updateNeeded,
      })
    }
  }
...
...
....
const mapStateToProps = state => ({
  mandatory_fields: state.User.mandatory_fields,
  session: state.User.session,
})

export default connect(mapStateToProps)(CompleteProfile)

Результат журнала консоли

this.props.mandatory_fields.updateNeeded -- false

Это должно быть true, как показано на изображении состояния Redux выше. Что мне не хватает?

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

С помощью решения @ Max весь ваш новый код должен выглядеть следующим образом:

componentDidUpdate(prevProps) {
  let { dispatch, session } = this.props
  dispatch(getMandatoryFields(session.username))
  console.log(
    'this.props.mandatory_fields.updateNeeded -- ' +
      this.props.mandatory_fields.updateNeeded
  );
  if (!prevProps.mandatory_fields.updateNeeded && this.props.mandatory_fields.updateNeeded) {
    this.setState({
      completeProfile: this.props.mandatory_fields.updateNeeded,
    })
  }
}
0 голосов
/ 03 сентября 2018

Вы должны проверить this.props.mandatory_fields.updateNeeded в componentDidUpdate крючке. После изменения состояния Redux Компонент будет обновлен. Таким образом, вы должны проверить props в componentDidUpdate вместо сразу после вызова диспетчеризации. Вы можете увидеть мой код:

componentDidUpdate(prevProps, prevState, snapshot) {
    console.log(
        'this.props.mandatory_fields.updateNeeded -- ' +
        this.props.mandatory_fields.updateNeeded
    )
}

Ваш код станет:

class CompleteProfile extends Component {
  state = {
    completeProfile: false,
  }

  componentDidMount(){
    let { dispatch, session } = this.props
    dispatch(getMandatoryFields(session.username))
  }

  componentDidUpdate() {
    console.log(
      'this.props.mandatory_fields.updateNeeded -- ' +
        this.props.mandatory_fields.updateNeeded
    )
    if (this.props.mandatory_fields.updateNeeded !== false) {
      this.setState({
        completeProfile: this.props.mandatory_fields.updateNeeded,
      })
    }
  }
...
...
....
const mapStateToProps = state => ({
  mandatory_fields: state.User.mandatory_fields,
  session: state.User.session,
})

export default connect(mapStateToProps)(CompleteProfile)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...