我读过有关 RTK 查询的内容,我很感兴趣,因为它消除了编写切片和 thunk 动作创建器的麻烦。但是,我认为我不想使用缓存失效功能。例如,在此沙箱中:https://codesandbox.io/s/github/reduxjs/redux-essentials-example-app/tree/checkpoint-5-createApi/ ?from-embed 在选项卡之间切换时,例如从通知切换到帖子,我总是想获取帖子,但在这个例子中,它遵循缓存计时器。如果不使用缓存失效功能,是否还应该使用 RTK 查询?如果是,有什么干净的方法可以确保当我通过调用查询挂钩来调用组件时,它总是会获取?我应该将缓存计时器设置为 0 秒吗?谢谢
即使我只在其中创建 Slice 并通过 Redux Saga 解决中间件,使用 Redux Toolkit 是否可以?
或者在这种情况下,最佳实践是使用 Redux Saga + raw Redux 而不使用 Toolkit?
谢谢
我正在使用 Redux-Toolkit,但下面的代码有问题。当extraReducers省略时,我的代码工作正常。extraReducers当 后列出时reducers,我遇到错误(如下所示)。当前面extraReducers列出时,我的代码工作正常。我在这里缺少什么? reducers
type Item = { id: string, name: string }
export const itemsAdapter = createEntityAdapter<Item>();
const initialState = itemsAdapter.getInitialState();
export const slice = createSlice({
name: 'items',
initialState,
reducers: {
itemsAdded(state, action: PayloadAction<{ items: Item[] }>) {
itemsAdapter.setAll(state, action.payload.items);
},
},
extraReducers: (builder) => { /* },,
});
Run Code Online (Sandbox Code Playgroud)
TS2322: Type '(state: WritableDraft<EntityState<Item>>, action: { payload: { items: Item[]; }; type: string; }) => void' is not assignable …Run Code Online (Sandbox Code Playgroud) 当我移动下一页或移动到另一个页面或更新数据时...数据不重新获取...当我重新加载页面然后重新获取数据...无需重新加载如何使用 RTK 查询重新获取数据..
这是代码
export const userService = createApi({
reducerPath: 'userService',
baseQuery: fetchBaseQuery({ baseUrl: 'http://localhost:5000/api/user/' }),
tagTypes: ["Userdetail",'Profile_update'],
endpoints: (builder) => ({
getuserdetails: builder.query({
query: () => ({
url: 'userdetails',
// method: 'GET',
headers: {
'Content-type': 'application/json',
'auth-token': localStorage.getItem('loginToken')
}
}),
providesTags : ['Userdetail']
}),
updateuserdetail: builder.mutation({
query: (newbody) => {
const {id,...data} = newbody
return{
url: `profile_update/${id}`,
method: 'PUT',
body: data,
headers: {
'Content-type': 'application/json',
'auth-token': localStorage.getItem('loginToken')
}
}
},
invalidatesTags :['Profile_update']
}),
})
})
Run Code Online (Sandbox Code Playgroud)
当渲染其他内容时调用 useGetuserdetailsQuery 每个组件
function …Run Code Online (Sandbox Code Playgroud) 我正在使用 Next.js 和 redux 构建一个电子商务应用程序。我注意到,当我将 redux-persist 添加到应用程序时,所有元标记都停止工作。我在下面添加了我的代码片段
import { combineReducers } from 'redux'
import { configureStore } from '@reduxjs/toolkit'
import shopReducer from './reducers/shop/shopSlice'
import storage from 'redux-persist/lib/storage'
import { persistStore,persistReducer, FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER } from 'redux-persist'
const initState = {}
const persistConfig = {
key: 'root',
version: 1,
storage,
whitelist: ['shop'],
}
const rootReducer = combineReducers({
shop: shopReducer,
})
const persistedReducer = persistReducer(persistConfig, rootReducer)
const reduxStore = () => {
const store = configureStore ({
initState,
reducer: …Run Code Online (Sandbox Code Playgroud) 我试图找出为什么我的异步 thunk 调用没有按预期工作。当我的网站首页加载时,我试图从数据库中提取 JSON 对象数组。现在,API 已被调用,数据已被提取,但动作创建者和切片之间出现了一些问题。我正在尝试console.log action,state但也没有任何结果。
我刚刚学习,redux-toolkit所以对此还很陌生。
这是我的切片:
import { createSlice } from '@reduxjs/toolkit'
const prizesSlice = createSlice({
name: 'prizes',
initialState: {
prizesArray: [],
},
reducers: {
getPrizes(state, action) {
console.log('hello')
state.prizes = action.payload
},
},
})
export const prizesSliceActions = prizesSlice.actions
export default prizesSlice
Run Code Online (Sandbox Code Playgroud)
这是动作创建者:
import { prizesSliceActions } from './prizes-slice'
import { createAsyncThunk } from '@reduxjs/toolkit'
import * as api from '../apiClient'
// get data
export const fetchPrizeData = createAsyncThunk(
'prizesArray/getPrizes', …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 useDispatch 将多个参数传递给 RTK 减速器。通常,我会将参数包装在对象或数组中,并在化简器中进行解构。但除了使用我著名的作弊代码“any”之外,我在使用 Typescript 时遇到了困难。我觉得这是一个非常无知的问题,并展示了我对 Typescript 的陌生,但希望得到任何帮助!
类型:
在我的地图组件中调度:
dispatch(updateMarkerCoords([marker.id, e.nativeEvent.coordinate]))
Run Code Online (Sandbox Code Playgroud)
RTK 切片:
updateMarkerCoords: (state, action: PayloadAction<Array<any>>) => {
const [id, coords] = action.payload
const marker = state.addNewField.markers.find((m) => m.id === id)
if (marker) {
marker.coords = coords
}
},
Run Code Online (Sandbox Code Playgroud) 我们有一个基于 fetchBaseQuery 的基本 RTK API Slice,就像RTK 文档中推荐的那样。
此外,还有一个后端服务将数据作为响应中的文本返回,但声明为Content-Type: application/json响应标头。我知道这不是一致的,但不幸的是,我们现在无权更改这一点。
我们尝试以正确的方式解析它,但我们无法获得任何有关数据的线索,我们在 RTK 中没有看到,甚至无法到达transformResponse. 当我们检查网络选项卡上的 XHR/Fetch 活动时,我们看到了预期的响应,这是我们成功接收数据的唯一线索。
我认为 RTK 不会处理此数据,因为它在响应标头上声明为 json,但在正文内以文本、字符串形式提供。这有点尴尬,因为我们在任何地方都没有看到任何错误。
您知道我们如何才能在 RTK 内部获得响应吗?
您好,我一直坚持使用 RTK 查询在一个功能组件中获取多个数据。如果您知道出路,请帮忙。多谢。
我的目标 我想通过 RTK 查询获取两个 api,都使用“GET”方法,基本 url 是相同的,唯一的区别是查询字符串。
我的问题是, 如果我只在函数组件中设置一个查询,则无法更改查询字符串,因为它将更改我从获取的数据中呈现的数据。
由于新的数据集为原始数据提供了信息。我不能将组件分成两部分。
我尝试 在 RTK 代码中的原始查询下方设置另一个查询,如下所示。
export const createIssueApi = createApi({
reducerPath: "createLabelApi",
baseQuery: fetchBaseQuery({
baseUrl: "https://api.github.com/repos",
}),
tagTypes: ["issues"],
endpoints: (builder) => ({
...... original query above, new query I set below
getClosedIssues: builder.query<GetLebal[], Parameter>({
query: ({ type, name, repo, query }) => ({
url: `/${name}/${repo}/${type}${query}`,
method: "GET",
headers: new Headers({
"Content-Type": "application/json",
Authorization: `token ${process.env.REACT_APP_PASSWORD}`,
}),
}),
providesTags: ["issues"],
}),
}),
});
Run Code Online (Sandbox Code Playgroud)
然后我尝试在同一组件中使用此查询来获取 2 个 api,如下所示
const …Run Code Online (Sandbox Code Playgroud) 我最近一直在集成 redux-toolkits createListenerMiddleware但目前有点陷入困境。我正在尝试输入一些“侦听器条目”,但似乎无法管理它。智能感知对我来说没有意义,我在文档或网上找不到任何与此相关的示例。目标是输入listenerApi参数,以便我可以使用该getState()函数而无需进行任何类型转换。
有什么简单的方法可以实现这一目标吗?
任何帮助将不胜感激。
listenerMiddleware.startListening({
actionCreator: toggleSomething, // Action generator from reducer createSlice
effect: async (
action: AnyAction,
listenerApi: ListenerEffectAPI<AppState, Dispatch> // Trying to type this in some way :[
): Promise<void> => {
const state = (await listenerApi.getState()) as AppState; // TODO: type this better
},
});
Run Code Online (Sandbox Code Playgroud) redux-toolkit ×10
redux ×7
react-redux ×6
reactjs ×5
rtk-query ×3
javascript ×2
typescript ×2
middleware ×1
next.js ×1
react-hooks ×1
redux-saga ×1
redux-thunk ×1