изменить состояние от componentWillReceiveProps влияет на компонент - PullRequest
0 голосов
/ 25 мая 2018

вот мой код componentWillReceiveProps

componentWillReceiveProps(next) {
console.log('45', next)
if (this.props.favList) {
  this.setState({ favRest: this.props.favList })
  console.log('setting state',this.state)
}
else
  if(this.props.EventList) {
  this.setState({ loading: false, EventList: this.props.EventList });
}
}

, когда состояние изменяется через this.props.favList, это показывает, что изменения в консоли состояния изменяются, но это состояние не затрагивается в методе рендеринга ... вметод рендеринга показывает предыдущее состояние

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Если вы используете React 16.3, вы можете использовать getDerivedStateFromProps, для которого в новом методе жизненного цикла willReceiveProps устарела.Согласно другим ответам у вас есть доступ к следующим реквизитам, которые будут иметь обновленное значение, доступное для сопоставления с состоянием.Таким образом, ваш код выше будет выглядеть следующим образом:

static getDerivedStateFromProps(nextProps, prevState) {
    console.log('45', nextProps)
    if (nextProps.favList) {
        return {
            favRest: nextProps.favList
        }
     } else if (nextProps.EventList) {
         return {
             loading: false,
             EventList: nextProps.EventList
         }
    }
    return null;
}
0 голосов
/ 25 мая 2018

this.props - это текущие реквизиты (до обновления), а первый параметр в componentWillReceiveProps - это новые реквизиты, которые получает компонент.Это то, что вы хотите:

componentWillReceiveProps(next) {
  console.log('45', next)
  if (next.favList) {
    this.setState({ favRest: next.favList })
    console.log('setting state',this.state)
  }
  else
    if(next.EventList) {
    this.setState({ loading: false, EventList: next.EventList });
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...