это первый раз, когда я сталкиваюсь с этим предупреждением.
Невозможно вызвать setState для компонента, который еще не смонтирован.
Следит:
Это не работает, но это может указывать на ошибку в вашем приложении. Вместо этого присвойте
this.stateнапрямую или определитеstate = {};свойство класса с желаемым состоянием в компоненте MyComponent.
" Еще не смонтированная " часть фактически не имеет особого смысла, поскольку единственный способ вызвать проблему - вызвать функцию, нажав кнопку в компоненте, который необходимо смонтировать, чтобы увидеть кнопку. Компонент не демонтируется в любой момент времени.
Этот фиктивный компонент воспроизводит ошибку в моем приложении:
import PropTypes from 'prop-types'
import React from 'react'
export default class MyComponent extends React.Component {
  constructor (props) {
    super(props)
    this.state = {
      initial: 'state'
    }
    this.clickMe = this.clickMe.bind(this)
  }
  clickMe () {
    this.setState({
      some: 'new state'
    })
  }
  render () {
    return (
      <div>
        <button onClick={this.clickMe}>click</button>
      </div>
    )
  }
}
Я использую:
"react": "16.3.2",
"react-dom": "16.3.2",
"mobx": "4.2.0",
"mobx-react": "5.1.2",
Я что-то упустил в последней версии React/mobx? (обратите внимание, что компонент не использует ничего, связанного с MOBX, но его родитель является наблюдателем MOBX).
Редактировать:
Должно быть что-то, связанное с экземпляром компонента, дальнейшее исследование показало, что в некоторых случаях создание обработчика внутри функции рендеринга делает это предупреждение исчезающим, но не во всех случаях.
class MyComponent extends React.component {
  constructor (props) {
    // ...
    this.clickMeBound = this.clickMe.bind(this)
  }
  clickMe () {
    ...
  }
  render () {
    // works
    <button onClick={() => {this.clickMe()}}>click arrow in render</button>
    // warning: Can't call setState on a component that is not yet mounted.
    <button onClick={this.clickMeBound}>click bound</button>
  }
}
Изменить 2:
Я удалил "response-hot-loader/patch" из своих записей в конфигурации Webpack, и некоторые странные проблемы, подобные этой, исчезли. Я не помещаю это как ответ, потому что само сообщение об ошибке все еще странно, и это вызывает предупреждение в консоли. Все работает хорошо, хотя.
