Сегментированный элемент управления в реагировать нативно не содержит одинаковое значение в событии и мое состояние

У меня проблема с компонентом SegmentedControl в React Native.

<SegmentedControlIOS style={styles.SegmentedControlIOS}
    values={['All', 'Recent']}
    selectedIndex={this.state.selectedIndex}
    onChange={this._handleChangeSegment.bind(this)}
/>

_handleChangeSegment(event) {
    console.log(event.nativeEvent.selectedSegmentIndex, "nativeEvent");
    this.setState({
        isLoading: true,
        selectedIndex: event.nativeEvent.selectedSegmentIndex
    });
    console.log(this.state.selectedIndex, "state");
    this.fetchData();
}

Проблема здесь заключается в значении nativeEvent.selectedSegmentIndex и моем состоянии selectedIndex в консоли, которую я имею:

По умолчанию состояние selectedIndex в конструкторе равно 1 (Недавние).
Когда я нажимаю "Все", консоль возвращается

0, nativeEvent
1, "состояние"

Итак, nativeEvent правильно, но, похоже, не обновляется в моем состоянии, и я не знаю почему.
Не могли бы вы помочь мне с этим?

В методе fetchData я проверяю, является ли состояние selectedIndex 1 или 0 для вызова ajax-запроса, но он не загружает хороший запрос, поскольку значение состояния не является nativeEvent.selectedSegmentedIndex.

С уважением.

1 ответ

С https://facebook.github.io/react/docs/component-api.html

setState () не изменяет немедленно this.state, но создает ожидающий переход в состояние. Доступ к this.state после вызова этого метода может потенциально вернуть существующее значение.

Следовательно, console.log(this.state.selectedIndex, "state") не обязательно возвращает мутированное состояние.

Если вам нужен доступ к измененному состоянию, вы можете передать функцию обратного вызова в качестве второго аргумента setState - эта функция обратного вызова будет выполнена после того, как состояние было изменено.

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