Я работаю над компонентом, который должен отслеживать ширину страницы при ее изменении. Однако я могу это сделать, но реакция продолжает бросать мне ошибку.Ошибка реагирования при монтаже или смонтированном компоненте может быть вызвана быстрыми и частыми вызовами setState()
это ошибка он бросает:
warning.js:36 Warning: setState(...): Can only update a mounted or mounting component.
This usually means you called setState() on an unmounted component. This is a no-op.
Please check the code for the Nav component.
Код, который трассировки стека указывает на том, что вызывает ошибку является handleResize()
метод на Nav
компонента. Сделав немного поиска и поиска в Google, я обнаружил, что причина заключается в том, что setState()
вызывается перед установкой компонента. Что странно, потому что прослушиватели событий регистрируются в componentDidMount()
. В статье предлагается использовать componentWillMount
Нет сигары. Я не совсем уверен, почему это происходит. Может быть, из-за того, что размер изменения размеров происходит быстрыми темпами?
handleResize() {
this.setState((prevState, currProps) => ({
height: window.innerHeight,
width: window.innerWidth
}));
if (this.props.showMenu === undefined) {
if (this.state.width > (this.props.breakPoint || 767) && this.state.showMenu) {
this.setState((prevState, currProps) => ({
showMenu: false,
}));
}
} else {
if (this.state.width > (this.props.breakPoint || 767) && this.props.showMenu) {
this.props.closeMenu();
}
}
}
componentDidMount() {
window.addEventListener('resize', this.handleResize.bind(this));
}
componentWillUnmount() {
window.removeEventListener('resize', this.handleResize.bind(this))
}
Вы связывание 'handleResize() 'в вашем конструкторе? 'this.handleResize() = this.handleRezise.bind (this);'. Кроме того, вместо 'componentDidMount()' вы не должны использовать 'componentWillMount()'? Мне нужно будет дважды проверить это. Кроме того, хотя это асинхронно, это может помочь перемещать функцию после установки вашего компонента. – Dandy
Лучше всего разместить полный код 'Nav'. –