#reactjs
#reactjs
Вопрос:
Сначала мой любимый цвет — красный, но дайте мне второй, и вместо него будет желтый. приведет ли componentDidMount к тому, что повторное отображение компонента будет отображаться желтым цветом?
class Header extends React.Component {
constructor(props) {
super(props);
this.state = {favoritecolor: "red"};
}
componentDidMount() {
setTimeout(() => {
this.setState({favoritecolor: "yellow"})
}, 1000)
}
render() {
return (
<h1>My Favorite Color is {this.state.favoritecolor}</h1>
);
}
}
ReactDOM.render(<Header />, document.getElementById('root'));
Комментарии:
1.
componentDidMount
выполняется рендеринг один раз после первого рендеринга. Итак, да, он будет повторно отображаться желтым цветом, и время ожидания этого не изменит2. @GregM Я использовал счетчик вместо избранного цвета, он обновляет состояние (увеличивая счетчик каждую секунду. Я не могу понять разницу между componentDidMount и componentDidUpdate.
3.
componentDidMount()
выполняется рендеринг 1 раз после первого рендеринга.componentDidUpdate
будет вызываться после каждого обновления состояния. Итак, после каждогоsetState
. ИспользованиеsetState
внутриcomponentDidUpdate()
приведет к бесконечному циклу.
Ответ №1:
Взято из документов React:
componentDidMount() вызывается сразу после монтирования компонента (вставки в дерево).
так что да, но…
Также из документов:
Вы можете немедленно вызвать setState() в componentDidMount(). Это вызовет дополнительный рендеринг, но это произойдет до того, как браузер обновит экран. Это гарантирует, что даже если render () в этом случае будет вызван дважды, пользователь не увидит промежуточное состояние.
Это означает, что вы увидите только желтый цвет.
Ответ №2:
componentDidMount
это метод жизненного цикла, который вызывается только при монтировании компонента. Он вызывается только один раз после первого рендеринга.
componentDidMount() {
// Runs after the first render() lifecycle
}
Когда React просматривает этот код, он собирается сначала отобразить компонент ( constructor()
это первый вызываемый метод), и сначала вы увидите цвет red
.
Сразу после этого React проверяет, есть ли у компонента componentDidMount()
метод для запуска каких-либо побочных эффектов.
В вашем componentDidMount()
методе вы указываете React обновить состояние компонента.
Итак, this.state.favoritecolor
перешел от red
к yellow
.
Полезная ссылка: Понимание React componentDidMount и того, как это работает
Комментарии:
1. Если он обновляет состояние всякий раз, когда мы говорим реагировать на обновление состояния, на самом деле я не могу понять разницу между componentDidMount и componentDidUpdate.
2.
componentDidMount
вызывается в начале, иcomponentDidUpdate
вызывается при каждом обновлении. Они не взаимозаменяемы. Диаграмма методов жизненного цикла React .