Отмена функции автозапуска mobx на componentWillUnmount

В моем componentDidMount есть следующая функция автозапуска:

componentDidMount() {
        this.autoUpdate = autorun(() => {
            this.setState({
                rows: generateRows(this.props.data)
            })
        })
    }

Проблема в том, что другой компонент изменяет this.props.data, когда компонент не смонтирован, и поэтому я получаю предупреждение .setState о несмонтированном компоненте.

Поэтому я хотел бы удалить автозапуск после размонтирования компонента.

Я пробовал делать:

componentWillUnmount() {
    this.autoUpdate = null
}

Но функция автозапуска все равно срабатывает. Есть ли способ отменить автозапуск mobx, если компонент больше не монтируется?


person Miha Šušteršič    schedule 25.04.2017    source источник


Ответы (1)


autorun возвращает функцию диспоузера, которую необходимо вызвать, чтобы отменить ее.

class ExampleComponent extends Component {
  componentDidMount() {
    this.autoUpdateDisposer = autorun(() => {
      this.setState({
        rows: generateRows(this.props.data)
      });
    });
  }

  componentWillUnmount() {
    this.autoUpdateDisposer();
  }

  render() {
    // ...
  }
}
person Tholle    schedule 25.04.2017