【发布时间】:2021-09-10 10:46:09
【问题描述】:
如何使用 Redux Toolkit RTK Query 将查询参数传递给 api?
import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';
const baseUrl = 'xxxxxxx';
export const postsApi = createApi({
reducerPath: 'posts',
baseQuery: fetchBaseQuery({ baseUrl }),
endpoints: (builder) => ({
getPostsByYear: builder.query({
query: (start, end) => { // Why is 'end' always undefined???
return {
url: 'posts/',
params: { start, end },
};
},
}),
getPosts: builder.query({
query: () => 'posts/',
}),
getPostByID: builder.query({
query: (name) => `posts/${name}`,
}),
}),
});
export const { useGetPostsQuery, useGetPostsByYearQuery, useGetPostByIDQuery } = postsApi;
当尝试从组件传递参数时,似乎只能识别start 值。 year 由<PostOptions/> 组件中的选择元素更新。它使用useState 钩子。该值正确更新并调用useGetPostsByYearQuery,但end 参数始终未定义。所以,看来我没有正确定义 api 端点。有什么建议吗?我想要它做的就是以http://xxx/posts?start=start&end=end 的形式发送请求。
我什至尝试为 end 参数硬编码一个字符串值,例如useGetPostsByYearQuery(year, '2019'),但它仍然显示为 undefined 与 api 回调,所以我错过了一些更基本的东西。
const Post = () => {
const year = useSelector((state) => state.postOptions.year);
const yearPlusOne = parseInt(year, 10) + 1;
const { data, error, isLoading } = useGetPostsByYearQuery(year, yearPlusOne);
return (
<SafeAreaView style={styles.container}>
<View style={styles.content}>
<PostHeading />
<PostOptions></PostOptions>
</View>
</SafeAreaView>
);
};
export default Post;
【问题讨论】:
-
没有太多可以添加到@slideshowp2 的答案,除了这个:
query只接受一个参数,这就是为什么你的end给你带来问题。下面的答案很好地展示了如何解决这个问题:)
标签: reactjs redux react-redux redux-toolkit rtk-query