Обновляет ли getDerivedStateFromProps состояние? - PullRequest
2 голосов
/ 05 марта 2019

Я прочитал документацию наactjs.org, касающуюся getDerivedStateFromProps.Я видел варианты использования.И я понимаю, зачем его использовать.

Но я не могу понять, как он работает с возвращаемым значением.Отсюда мой вопрос, когда он возвращается ... куда он идет?

Он не setState, потому что не имеет к нему доступа.

Для установки состояния требуетсяиспользование componentDidUpdate и поиск изменений, затем установка состояния.

Предположим, следующий код:

public static getDerivedStateFromProps: IArrowFunction = (nextProps: IMyContainerProps, prevState: IMyContainerState) => {
    if (nextProps.havingFun !== prevState.havingFun) {
        console.log('[MyContainer.tsx] getDerivedStateFromProps :::::CHANGED::::::', nextProps, prevState);
        return { havingFun: nextProps.havingFun };
    } else { return null; }
}

Так что же React делает с этим возвращением ^?

Тогда я мог быsetState для componentDidMount.Но это, похоже, не имеет ничего общего с getDerivedStateFromProps.Кроме того, этот метод жизненного цикла срабатывает каждый раз.И это вызывает повторный рендеринг.

public componentDidUpdate(prevProps: IMyContainerProps, prevState: IMyContainerState): void {
    if (prevState.havingFun !== this.props.havingFun) {
        console.log('[MyContainer.tsx] componentDidUpdate *******CHANGED******', prevState, prevProps, this.props);
        this.setState({ havingFun: this.props.havingFun });
    }
}

В какой момент вступает в игру возврат из getDerivedStateFromProps?

ОБНОВЛЕНО: этот метод жизненного цикла будетфактически обновить состояние, если правильно настроено, как указано выше.Вам не нужен дополнительный метод для setState

Ответы [ 2 ]

2 голосов
/ 05 марта 2019

Возвращаемое значение в принципе похоже на setState:

return { havingFun: nextProps.havingFun };

Где можно принять havingFun свойство состояния, а значение nextProps.havingFun является обновленным значением.

Когда выиспользуйте return null, это означает, что вы ничего не делаете с состоянием.

Примечание: getDerivedStateFromProps - это действительно другое понятие, чем setState, хотя я попытался объяснить это только способом.

Вы должныпрочтите docs для более подробной информации:

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

2 голосов
/ 05 марта 2019

Возвращается состояние, когда родительский компонент перерисовывается.

...