标签: redux-toolkit

如何使用RTK查询但总是获取

我读过有关 RTK 查询的内容,我很感兴趣,因为它消除了编写切片和 thunk 动作创建器的麻烦。但是,我认为我不想使用缓存失效功能。例如,在此沙箱中:https://codesandbox.io/s/github/reduxjs/redux-essentials-example-app/tree/checkpoint-5-createApi/ ?from-embed 在选项卡之间切换时,例如从通知切换到帖子,我总是想获取帖子,但在这个例子中,它遵循缓存计时器。如果不使用缓存失效功能,是否还应该使用 RTK 查询?如果是,有什么干净的方法可以确保当我通过调用查询挂钩来调用组件时,它总是会获取?我应该将缓存计时器设置为 0 秒吗?谢谢

reactjs redux react-redux redux-toolkit rtk-query

2
推荐指数
1
解决办法
8464
查看次数

Redux Toolkit 和 Redux Saga 可以一起使用吗?

即使我只在其中创建 Slice 并通过 Redux Saga 解决中间件,使用 Redux Toolkit 是否可以?

或者在这种情况下,最佳实践是使用 Redux Saga + raw Redux 而不使用 Toolkit?

谢谢

redux redux-saga react-redux redux-toolkit

2
推荐指数
1
解决办法
4697
查看次数

在减速器导致问题之后列出 Redux-Toolkit extraReducers(TS2322 错误)

问题

我正在使用 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)

javascript typescript redux react-redux redux-toolkit

2
推荐指数
1
解决办法
994
查看次数

如何在 RTK 查询中自动重新获取数据

当我移动下一页或移动到另一个页面或更新数据时...数据不重新获取...当我重新加载页面然后重新获取数据...无需重新加载如何使用 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)

reactjs redux-toolkit rtk-query

2
推荐指数
1
解决办法
1万
查看次数

在 Next.js 中使用 redux-persist 时元标记出现问题

我正在使用 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)

reactjs react-redux next.js redux-persist redux-toolkit

2
推荐指数
1
解决办法
2477
查看次数

Redux Toolkit:Async Thunk 未正确连接到我的减速器

我试图找出为什么我的异步 thunk 调用没有按预期工作。当我的网站首页加载时,我试图从数据库中提取 JSON 对象数组。现在,API 已被调用,数据已被提取,但动作创建者和切片之间出现了一些问题。我正在尝试console.log actionstate但也没有任何结果。

我刚刚学习,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)

redux redux-thunk react-redux redux-toolkit

2
推荐指数
1
解决办法
1598
查看次数

如何使用 Typescript 将多个参数传递给 redux 减速器?

我正在尝试使用 useDispatch 将多个参数传递给 RTK 减速器。通常,我会将参数包装在对象或数组中,并在化简器中进行解构。但除了使用我著名的作弊代码“any”之外,我在使用 Typescript 时遇到了困难。我觉得这是一个非常无知的问题,并展示了我对 Typescript 的陌生,但希望得到任何帮助!

类型:

  • 标记.id = 字符串
  • e.nativeEvent.coordinate = {纬度:数字,经度:数字}

在我的地图组件中调度:

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)

javascript reactjs redux react-redux redux-toolkit

2
推荐指数
1
解决办法
2127
查看次数

RTK 查询不处理文本响应

我们有一个基于 fetchBaseQuery 的基本 RTK API Slice,就像RTK 文档中推荐的那样。

此外,还有一个后端服务将数据作为响应中的文本返回,但声明为Content-Type: application/json响应标头。我知道这不是一致的,但不幸的是,我们现在无权更改这一点。

我们尝试以正确的方式解析它,但我们无法获得任何有关数据的线索,我们在 RTK 中没有看到,甚至无法到达transformResponse. 当我们检查网络选项卡上的 XHR/Fetch 活动时,我们看到了预期的响应,这是我们成功接收数据的唯一线索。

我认为 RTK 不会处理此数据,因为它在响应标头上声明为 json,但在正文内以文本、字符串形式提供。这有点尴尬,因为我们在任何地方都没有看到任何错误。

您知道我们如何才能在 RTK 内部获得响应吗?

redux redux-toolkit rtk-query

2
推荐指数
1
解决办法
2590
查看次数

React工具包查询-如何在同一功能组件中使用多个查询

您好,我一直坚持使用 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)

reactjs react-hooks redux-toolkit

2
推荐指数
1
解决办法
2505
查看次数

如何输入 Redux-Toolkit createListenerMiddleware 监听器条目

我最近一直在集成 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)

middleware typescript redux redux-toolkit

2
推荐指数
1
解决办法
1127
查看次数