我有一个选择选项菜单。因此,当用户选择一个选项时,我想使用该选项向服务器发送一个 GET/ 请求,并从服务器接收过滤后的数据。
这可以使用 useEffect(() => {// send the request}, [criteria]) 来实现
因为,useEffect 确保只有在 setCriteria 完成后,请求才会发送到服务器。
但是,我正在使用react-query
图书馆。因此,它不允许在useQuery
inside中使用useEffect
。
结果,请求在 setState 完成之前被发送到服务器。因此,服务器获取先前选择的值,而不是当前选择的值。
改变:
<select
name="filter"
value={criteria}
onChange={async (e) => {
setCriteria(e.target.value);
}}
>
<option>Most recent First</option>
<option>Price: Low to High</option>
<option>Price: High to Low</option>
</select>;
获取帖子:
const FetchPosts = async () => {
const {
data: { posts },
} = await axios.get(`${process.env.API_URL}/api/posts`, {
params: {
filter: criteria,
},
});
return posts;
};
useQuery("posts", FetchPosts);
const posts = queryCache.getQueryData("posts");