RTK(Redux Toolkit)是一个用于简化 Redux 开发的工具集。在使用 RTK 进行数据查询时,可以通过 createApi 方法来实现去抖动(debounce)的查询。
去抖动是一种技术,用于限制函数的调用频率,以避免频繁的请求或操作。在实际应用中,当用户连续触发某个事件时(例如输入框输入),我们希望在用户停止操作一段时间后才进行查询,以减少不必要的请求或操作。
要实现 RTK 的去抖动查询,可以按照以下步骤进行操作:
npm install @reduxjs/toolkit react-redux axios
import { createSlice, createAsyncThunk } from '@reduxjs/toolkit';
import axios from 'axios';
// 创建异步 Thunk
export const fetchQuery = createAsyncThunk('query/fetch', async (params) => {
const response = await axios.get('/api/query', { params });
return response.data;
});
// 创建 API Slice
const querySlice = createSlice({
name: 'query',
initialState: {
data: null,
loading: false,
error: null,
},
reducers: {},
extraReducers: (builder) => {
builder
.addCase(fetchQuery.pending, (state) => {
state.loading = true;
state.error = null;
})
.addCase(fetchQuery.fulfilled, (state, action) => {
state.loading = false;
state.data = action.payload;
})
.addCase(fetchQuery.rejected, (state, action) => {
state.loading = false;
state.error = action.error.message;
});
},
});
export default querySlice.reducer;
import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';
// 创建 API 实例
const api = createApi({
reducerPath: 'api',
baseQuery: fetchBaseQuery({ baseUrl: '/api' }),
endpoints: (builder) => ({
query: builder.query({
query: (params) => `/query`,
}),
}),
refetchOnMountOrArgChange: 2000, // 设置去抖动的时间间隔(单位:毫秒)
});
export const { useQueryQuery } = api;
export default api;
import { configureStore } from '@reduxjs/toolkit';
import { Provider } from 'react-redux';
import api from './api';
import queryReducer from './querySlice';
// 配置 Redux Store
const store = configureStore({
reducer: {
[api.reducerPath]: api.reducer,
query: queryReducer,
},
middleware: (getDefaultMiddleware) =>
getDefaultMiddleware().concat(api.middleware),
});
// 在根组件中使用 Provider
const App = () => (
<Provider store={store}>
{/* 应用的其他组件 */}
</Provider>
);
import { useEffect } from 'react';
import { useQueryQuery } from './api';
const MyComponent = () => {
const { data, isLoading, isError, refetch } = useQueryQuery();
useEffect(() => {
refetch(); // 发起查询请求
}, []);
if (isLoading) {
return <div>Loading...</div>;
}
if (isError) {
return <div>Error: {isError}</div>;
}
return (
<div>
{/* 使用查询结果进行渲染 */}
{data && <div>{data}</div>}
</div>
);
};
通过以上步骤,你可以使用 RTK 的 createApi 方法实现去抖动的查询。在这个例子中,我们使用了 Redux Toolkit、React Redux、axios 等工具和库来简化开发过程。具体的实现细节和配置可以根据实际需求进行调整。
腾讯云相关产品和产品介绍链接地址:
请注意,以上链接仅供参考,具体的产品选择和配置应根据实际需求和情况进行决策。
领取专属 10元无门槛券
手把手带您无忧上云