Обновление состояния компонента с помощью реквизита - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь обновить состояние некоторых компонентов, используя полученные реквизиты, следующим образом:

componentWillReceiveProps(nextProps) {
   if(nextProps.history.length <= 2) {
      this.setState({
         history: nextProps.history
      });
   }
}

Проблема в том, что, когда родитель передает историю с длиной больше 2, состояние все еще мутирует,Есть идеи?

Спасибо

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Вы можете использовать componentDidUpdate() метод жизненного цикла или статический getDerivedStateFromProps() метод.

static getDerivedStateFromProps(props, state) {
    return ({
        history: props.history.length <= 2 ? props.history : state.history
    })
}

Или, если вы предпочитаете:

componentDidUpdate(prevProps) {
    const { history } = this.props;
    if((prevProps.history !== history) && history.length <= 2) {
        this.setState({ history })
    }
}
0 голосов
/ 24 октября 2018

Метод жизненного цикла componentWillReceiveProps устарел.Вы должны использовать getDerivedStateFromProps

getDerivedStateFromProps вызывается непосредственно перед вызовом метода рендеринга как при первоначальном монтировании, так и при последующих обновлениях.Он должен возвращать объект для обновления состояния или null для обновления ничего.

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