У меня есть панель поиска и простой FlatList. Моя логика c для фильтра поиска работает нормально, но это хорошо для простого поиска.
Пример: если в моем FlatList есть три элемента
1. Час посещения.
2. Он знал час посещения.
3. Посещение и час.
В моей панели поиска, если я ищу "посещение ч" , будет отображаться только item 2 -> 2. Он знал час посещения.
Я хочу, чтобы он отображал все 3 элемента при поиске "посещение ч" Мой фильтр поиска должен искать все элементы, включающие "посещение" и "час". Он также должен включать «визит» в «посещение»
Как я могу захватить этот тип фильтра? Есть ли какая-нибудь библиотека js, которую можно использовать? Любой эффективный способ выполнить этот фильтр поиска?
Мой текущий код ниже:
export default class HomeComponent extends Component {
constructor(props){
super(props)
this.state = {
isLoading: true,
notifications: [],
query: '',
temp:[]
}
};
componentDidMount() {
fetch('https://140xya6a67.execute-api.ap-southeast-1.amazonaws.com/dev/', {
method: 'GET',
})
.then((response) => response.json())
.then((responseJson) => {
this.setState({
isLoading: false,
notifications: responseJson,
notificationRead: false,
temp: responseJson,
})
})
};
goToDetails() {
return this.props.navigation.navigate(Details) ;
}
renderItem({item}) {
return <NotificationItem item={item}
onPress = {()=> {this.goToDetails()}}
/>
}
handleSearch(text){
const newData = _.filter(this.state.temp, (item) => {
const itemData = item.Desc ? item.Desc.toUpperCase() : ''.toUpperCase();
const textData = text.toUpperCase();
return itemData.indexOf(textData) > -1;
});
this.setState({
notifications: newData,
query:text,
});
}
renderContent() {
let {notifications} = this.state;
return (
<View>
<SearchBar placeholder='type here...' lightTheme round value={this.state.query} onChangeText={(text)=>{this.handleSearch(text)}} />
<FlatList
keyExtractor={(item, id) => item.id}
data={notifications}
renderItem={this.renderItem.bind(this)}
/>
</View>
);
}
render () {
let {fill, container} = styles;
return (
<View style={ [fill, container] }>
{this.renderContent()}
</View>
);
}
}