React native 过滤器棒不';t当数据为空时重置数据

React native 过滤器棒不';t当数据为空时重置数据,react-native,filter,asyncstorage,React Native,Filter,Asyncstorage,我正在使用react native从异步存储中发布和获取数据,一切正常,我可以保存数据并获取数据,但我无法正确设置过滤条。它只在一个方向上起作用,例如,当我在输入中写入某些内容时,我会看到适合的结果,但是当我从输入中删除字符时,数据不会恢复正常,并且我看不到任何内容,即使filterBar为空,是否有人建议如何修复它 constructor(props) { super(props); this.state = { search: "", data: []

我正在使用react native从异步存储中发布和获取数据,一切正常,我可以保存数据并获取数据,但我无法正确设置过滤条。它只在一个方向上起作用,例如,当我在输入中写入某些内容时,我会看到适合的结果,但是当我从输入中删除字符时,数据不会恢复正常,并且我看不到任何内容,即使filterBar为空,是否有人建议如何修复它

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}
乌利卡:{埃尔街}
);
});
};

啊,我觉得必须先复制数据,但完全不知道下一步该怎么做,一切都很完美!非常感谢你,伙计:)