Реагируйте на собственный Redux: this.setState не меняет состояние

this.setState({device}) вообще не обновляет состояние, если я не принудительно установлю его с помощью "this.state.device = __", однако это все равно будет проблемой, поскольку компонент не выполняет повторную визуализацию. Я попытался использовать функцию обратного вызова, такую ​​как:

this.setState({device: selectedDeviceId}, () => {
    console.log(this.state.device)
})    

но код вообще не регистрируется, что указывает на то, что setState даже не вызывается.

class Stats extends React.Component {
  state = {
    viewType: 'day',
    dt: moment(),
    device: {}
  }
  getDevice = () => {
    const devices = this.props.devices || []
    const selectedDeviceId = this.props.selectedDeviceId

    devices.forEach((d) => {
      if (d._id === selectedDeviceId) this.setState({device: d})
    })
    if (!this.state.device._id && devices.length) {
      this.setState({device: devices[0]})
    }
    this.getUsage()
  }

  componentWillMount () {
      console.log('Enter StatsScreen.componentWillMount')
      let dt = this.state.dt
      const date = moment(dt).format('YYYY-MM-D')
      console.log(date)
      this.getDevice()
  }
}

1 ответ

Решение

Проблема в том, что вы не используете React Native state, вы используете переменную, которую вы называете state. Исправьте это, написав метод жизненного цикла конструктора и поместив this.state = там для инициализации.

Кстати, избегайте подобных вещей в методе жизненного цикла willMount, делайте это в didMount, тогда вы не блокируете пользовательский интерфейс.

Другие вопросы по тегам