Как заполнить сборщик в реагировать нативно из массива - PullRequest
0 голосов
/ 26 сентября 2018

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

это моя функция, которая извлекает данные из локального хранилища

async getElementsInLocalStorage() {
 try{    
    let x = [];
    let all_keys = await AsyncStorage.getAllKeys();

    for(i = 1; i <= all_keys.length;i++ ){
        let converter =  JSON.parse(await AsyncStorage.getItem('one_person'+i));
        x[i] = converter.first_name + ' ' + converter.last_name;                  
    }

    this.setState({all_options: x, data: x,});
 } catch(error){
   alert(error)
 }
}

А это мой конструктор

constructor(){
    super();   
    this.state = {
        first_name: '',
        last_name : '',
        all_options : [],    
    };
    data = [];
}

А это мой сборщик

 <Picker selectedValue = {this.state.selected} >
       {this.state.data.map((value)=><Picker.Item label={value} value={value}/>)} 
 </Picker>

когда тип data только в сборщике не заполнен, а когда тип this.state.data это ошибка возврата

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Можете ли вы попробовать это.Что я сделал, так это

Переместил данные в состояние и добавил условную проверку перед выполнением .map

constructor(){
    super();   
    this.state = {
        first_name: '',
        last_name : '',
        all_options : [], 
        data = []
    };
}

И это мой сборщик

<Picker selectedValue = {this.state.selected} >
       {this.state.data && this.state.data.map(value=> (<Picker.Item label={value} value={value}/>))} 
 </Picker>
0 голосов
/ 26 сентября 2018

Вы определили data как отдельную переменную в конструкторе.Но после извлечения данных вы рассматриваете data как переменную состояния.

Просто объявите data внутри состояния, и это может решить вашу проблему.

constructor(){
    super();   
    this.state = {
      first_name: '',
      last_name : '',
      all_options : [],   
      data:[] 
    };
}
...