【发布时间】:2020-12-27 17:22:37
【问题描述】:
我只是想按关键字搜索。我有一个搜索框,当用户键入时,我试图查询 firestore 以找到最接近的搜索词。请问我能得到帮助吗?我只是想。让用户搜索并显示来自data 状态的类似搜索词
这是我的代码
const SearchScreen = (props) => {
const [searchDetails, setSearchDetails] = useState('');
const [data, setData] = useState([]);
const [recent, setRecent] = useState(true);
const inputRef = React.useRef()
const searchFilterFunction = async (searchTerm) => {
setRecent(false)
setSearchDetails(searchTerm);
let data = []
const db = firebase.firestore().collection('Posts')
const check = searchDetails === undefined? '': searchDetails
await db.orderBy('name').startAt(check ).endAt(check + "\uf8ff" ).get().then(()=>{
for (let i = 0; i < db.docs.length; i++) {
data.push(snapshot.docs[i].data());
}
setData(data)
})
};
const handleSearchResults = (name) =>{
if(recent!== true){
dispatch(searchRecent(name))
}
searchFilterFunction(name)
props.navigation.navigate({
routeName: "SearchResults",
params:{
searchDetails: searchDetails,
searchData: data,
}
})
}
return (
<View style={styles.container}>
<SearchBar
placeholder="Search Recipe or ingredient."
onChangeText={(text) => searchFilterFunction(text)}
value={searchDetails}
ref={inputRef}
onSubmitEditing={()=> handleSearchResults(searchDetails)}
/>
{/* shows the search terms like auto suggest */}
<FlatList
showsVerticalScrollIndicator={false}
data={data}
keyExtractor={(item, index) => item.postId}
renderItem={renderItem}
/>
</View>
);
};
export default SearchScreen;
【问题讨论】:
-
有什么问题?具体来说:当您在调试器中单步执行此代码时,哪个特定行没有按照您的预期执行?如果它与数据库调用有关,您还需要显示您使用的
check的值、您搜索的数据以及您在回调中返回的结果。一般而言,请参阅how to create a minimal, complete, verifiable example,因为这是最大限度地提高他人可以提供帮助的更改的最佳方式。
标签: javascript firebase react-native google-cloud-firestore react-hooks