#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