React-native: Пикер onValueChange setState lagging, нужно ли setTimeout? - PullRequest
0 голосов
/ 02 июля 2019

В моем родном проекте React у меня есть средство выбора, которое за кулисами выбирает массив для использования в функции.

 <Picker
      style={styles.onePicker} itemStyle={styles.onePickerItem}
      selectedValue={this.state.food}
      onValueChange={(itemValue) => { this.setState({food: itemValue}); this.cuisine();}}
    >
      <Picker.Item label="Italian" value="Italian" />
      <Picker.Item label="Chinese" value="Chinese" />
      <Picker.Item label="Cajun" value="Cajun" />
      <Picker.Item label="KFC" value="KFC" />
    </Picker>

Все это работает, но setState не назначается до запуска функции. При использовании используемый массив представляет собой одну секцию выбора / действие за показанным.

Нормально ли нужно использовать setTimeout или то, что используется в реагировании для сборщиков?

Я также попытался передать значение элемента в функцию кухни. this.cuisine (ItemValue);

который звонит:

kitchen = (data) => {функциональность}

но в консоли или в предупреждении, чтобы показать переданные данные, я получаю только

 [object Object]

, а не фактическое значение.

Я немного зелен в использовании ES6 и React.

1 Ответ

1 голос
/ 02 июля 2019

Используйте это, это работает отлично для меня

 <View>
        <Picker        
          selectedValue={this.state.food}
          onValueChange={(itemValue) => {  this.cuisine(itemValue);}}>
          <Picker.Item label="Italian" value="Italian" />
          <Picker.Item label="Chinese" value="Chinese" />
          <Picker.Item label="Cajun" value="Cajun" />
          <Picker.Item label="KFC" value="KFC" />
  </Picker>

      <Text>{this.state.food}</Text>

  </View>

и теперь в функции кухни

cuisine = (itemValue: any) => { 
   this.setState({food: itemValue});   
   console.log(this.state.food);
}
...