React native 过滤器棒不';t当数据为空时重置数据
我正在使用react native从异步存储中发布和获取数据,一切正常,我可以保存数据并获取数据,但我无法正确设置过滤条。它只在一个方向上起作用,例如,当我在输入中写入某些内容时,我会看到适合的结果,但是当我从输入中删除字符时,数据不会恢复正常,并且我看不到任何内容,即使filterBar为空,是否有人建议如何修复它React native 过滤器棒不';t当数据为空时重置数据,react-native,filter,asyncstorage,React Native,Filter,Asyncstorage,我正在使用react native从异步存储中发布和获取数据,一切正常,我可以保存数据并获取数据,但我无法正确设置过滤条。它只在一个方向上起作用,例如,当我在输入中写入某些内容时,我会看到适合的结果,但是当我从输入中删除字符时,数据不会恢复正常,并且我看不到任何内容,即使filterBar为空,是否有人建议如何修复它 constructor(props) { super(props); this.state = { search: "", data: []
constructor(props) {
super(props);
this.state = {
search: "",
data: [],
error: ""
};
}
handleTextChange = search => {
this.setState({ search });
let data = this.state.data;
data = data.filter(el => el.name.match(search))
this.setState({data:data})
};
_displayAllData = () => {
return this.state.data.map(el => {
return (
<View>
<Text >
Nazwa: <Text>{el.name}</Text>
</Text>
<View>
<Text>
Ulica: <Text>{el.street}</Text>
</Text>
</View>
</View>
);
});
};
render() {
return (
<ScrollView>
<View style={styles.container}>
<View style={styles.inputContainer}>
<TextInput
placeholder="find results"
onChangeText={this.handleTextChange}
value={this.state.search}
/>
</View>
{this._displayAllData()}
<View>
<Text>{this.state.error}</Text>
</View>
</View>
</ScrollView>
);
}
构造函数(道具){
超级(道具);
此.state={
搜索:“,
数据:[],
错误:“
};
}
handleTextChange=搜索=>{
this.setState({search});
让data=this.state.data;
data=data.filter(el=>el.name.match(搜索))
this.setState({data:data})
};
_displayAllData=()=>{
返回此.state.data.map(el=>{
返回(
纳兹瓦:{el.name}
乌利卡:{埃尔街}
);
});
};
render(){
返回(
{this.\u displayAllData()}
{this.state.error}
);
}
发生这种情况是因为您正在对原始列表(数据数组)执行筛选。尝试一件事,取两个数组,一个用于显示筛选数据列表,另一个用于原始数据列表。
请参阅下面的代码。如果此解决方案有任何问题,请告诉我
constructor(props) {
super(props);
this.state = {
search: "",
data: [],
filterData:[], // take one more list to show filter data list
error: ""
};
}
最初,将相同的数据添加到两个列表中:
componentWillMount(){
this.setState({data: //set your data, filterData: //set same data})
}
HandleSearch数据:
handleTextChange = search => {
this.setState({ search });
let data = this.state.data;
//apply filter to your original list
data = data.filter(el => el.name.match(search))
this.setState({filterData:data}) //set filter result in your filterData list.
};
使用filterDataList显示您的列表
_displayAllData = () => {
return this.state.filterData.map(el => {
return (
<View>
<Text >
Nazwa: <Text>{el.name}</Text>
</Text>
<View>
<Text>
Ulica: <Text>{el.street}</Text>
</Text>
</View>
</View>
);
});
};
\u displayAllData=()=>{
返回此.state.filterData.map(el=>{
返回(
纳兹瓦:{el.name}
乌利卡:{埃尔街}
);
});
};
啊,我觉得必须先复制数据,但完全不知道下一步该怎么做,一切都很完美!非常感谢你,伙计:)