Javascript 反应本机Firebase搜索列表视图
我有一个listview,它是从我的React原生应用程序中的Firebase中提取的。我遇到了一些关于人们如何使用fetch函数搜索listview的教程,但对Firebase却一无所知 我在listview的标题处有一个搜索栏,如何使用Firebase按关键字搜索并过滤结果 我按照Firebase网站上的指南设置了我的listview和数据源。我希望能够在每个字段中按关键字进行搜索Javascript 反应本机Firebase搜索列表视图,javascript,listview,firebase,react-native,firebase-realtime-database,Javascript,Listview,Firebase,React Native,Firebase Realtime Database,我有一个listview,它是从我的React原生应用程序中的Firebase中提取的。我遇到了一些关于人们如何使用fetch函数搜索listview的教程,但对Firebase却一无所知 我在listview的标题处有一个搜索栏,如何使用Firebase按关键字搜索并过滤结果 我按照Firebase网站上的指南设置了我的listview和数据源。我希望能够在每个字段中按关键字进行搜索 listenForItems(itemsRef) { itemsRef.on('value', (snap)
listenForItems(itemsRef) {
itemsRef.on('value', (snap) => {
var items = [];
snap.forEach((child) => {
items.push({
title: child.val().title,
category: child.val().category,
description: child.val().description,
});
});
this.setState({
dataSource: this.state.dataSource.cloneWithRows(items)
});
});
}
我终于明白了。此代码基于特定的项目名称进行搜索 数据库 带搜索栏的列表视图 这将通过使用orderbychild.startat.endat firebase函数替换listview数据源来搜索firebase。这是最接近于SELECT*BY%的类似于%sql的搜索函数 我修改了我的代码,也按第一个字母搜索。因此,如果有人搜索Macbuk,它仍然会显示Macbook的结果。它只搜索M。我在我的数据库中将另一个字段添加到要搜索的标题的第一个字母中,并将其改为小写
{
"directory" : {
"macintosh" : {
"address" : "117 East 11th Street, Hays, KS 67601",
"firstLetter" : "m",
"title" : "Macintosh",
},
"apple" : {
"address" : "117 East 11th Street, Hays, KS 67601",
"firstLetter" : "a",
"title" : "apple",
},
},
render() {
return (
<View style={styles.container}>
<ScrollView>
<SearchBar
returnKeyType='search'
lightTheme
placeholder='Search...'
onChangeText={(text) => this.setState({searchText:text})}
onSubmitEditing={() => this.firstSearch()}
/>
{
this.state.loading &&
<ActivityIndicator
size="large"
color="#3498db"
style={styles.activityStyle}
/>
}
<ListView
dataSource={this.state.dataSource}
renderRow={this._renderItem.bind(this)}
enableEmptySections={true}
/>
</ScrollView>
</View>
);
}
firstSearch() {
this.searchDirectory(this.itemsRef);
}
searchDirectory(itemsRef) {
var searchText = this.state.searchText.toString();
if (searchText == ""){
this.listenForItems(itemsRef);
}else{
itemsRef.orderByChild("searchable").startAt(searchText).endAt(searchText).on('value', (snap) => {
items = [];
snap.forEach((child) => {
items.push({
address: child.val().address,
firstLetter: child.val().firstLetter,
title: child.val().title,
});
});
this.setState({
dataSource: this.state.dataSource.cloneWithRows(items)
});
});
}
}