Я не могу инициализировать этот массив React Native

#javascript #react-native

#javascript #react-native

Вопрос:

Каждый раз, когда я запускаю рендеринг expo, массив состояний person2 не инициализируется, и у меня появляется ошибка «не удается найти переменную person2», когда person2 инициализируется, код запускается нормально, но при повторном запуске приложения person2 не определен

мой person.js :

 export default class Example1 extends React.Component {
  constructor (props) {
      super (props)
      this.state = {
        nameres: "",
        person2 : []
      }
    }
    setRes (nameres) {
      this.setState ({nameres})
      person2 = [];
      for (let i=0; i<person.length; i  ) {
        list = person[i].first_name.toUpperCase();
        if (list.includes(nameres.toUpperCase())) {          
          person2.push(person[i])
      }
        this.setState({ person2 });
    }}
    
  render() {
    const image = { uri: "../img/23.jpg" };    
    return (
      <View style={styles.main_container}>
        <ImageBackground source={image} style={styles.image} blurRadius={5}>
          <TextInput style={styles.textinput} placeholder=' recherche par nom' onChangeText={(text) => this.setRes(text)}
          value={this.state.nameres}/>
          <FlatList
            data={this.state.person2} 
            extraData={person2}
            keyExtractor={(item) => item.id.toString()}
            renderItem={({item}) => <ItemPerson contid={item}/>}
          />
        </ImageBackground>
        
      </View>
    );
  }
}
 

мой массив json :

 { "person" : [
    {
        "id": 1,
        "first_name": "jonas",
        "last_name": "jojo"
    },
    {
        "id": 2,
        "first_name": "Pataa",
        "last_name": "tee"
    }]}
 

Ответ №1:

Это может помочь

 setRes (nameres) { 
      const person2 = []; // initialize here and add let or const 
      ...
}
 

Вы можете вызвать setRes , componentDidMount который выполняется, когда экран отображается следующим образом

 componentDidMount(){
  this.setRes(""); // set default
}
 

в render

 render() {
    const image = { uri: "../img/23.jpg" };    
    return (
      <View style={styles.main_container}>
        ....
       <FlatList
            ...
            extraData={this.state.person2} // add `person2` from `state` like
            ......
          />        
      </View>
    );
}
 

Комментарии:

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

2. Большое спасибо, mutch Nooruddin