redux-toolkit查询验证坚持
您好,我创建了一个功能良好的应用程序,可以创建用户,获取用户,添加帖子,反应,删除帖子。现在,我想将Auth添加到我的应用程序中。但是我很困惑如何坚持状态,添加还原器,动作并初始化这样的状态。
我在这里分享一些代码:
import { LOCAL_LOGIN, LOGIN, SIGN_OUT} from '../types';
const initialState = {
user:null,
token:null,
is_logged_in:false
};
const LoginReducer = (state = initialState, action) => {
switch(action.type) {
case LOGIN:
return {
...state,
user:action.payload.data,
token:action.payload.access_token,
is_logged_in:true,
};
case LOCAL_LOGIN:
return{
...state,
user:action.payload.data,
token:action.payload.access_token,
is_logged_in:true,
}
case SIGN_OUT:
return{
...state,
user:null,
is_logged_in:false
}
default:
return state;
}
}
export default LoginReducer;
这很好。这是我的新代码
/// apislice.js
import {
createApi,
fetchBaseQuery
} from "@reduxjs/toolkit/query/react";
export const apiSlice = createApi({
reducerPath: "api",
baseQuery: fetchBaseQuery({
baseUrl: "https://ab91-203-82-55-110.ngrok.io/"
}),
tagTypes: ['Post', 'User'],
endpoints: builder => ({})
});
/// postslice.js
import {
createSelector,
createEntityAdapter
} from "@reduxjs/toolkit";
import { apiSlice } from "../api/apiSlice";
const usersAdapter = createEntityAdapter()
const initialState = usersAdapter.getInitialState()
export const usersApiSlice = apiSlice.injectEndpoints({
endpoints: builder => ({
getUsers: builder.query({
query: () => '/users',
transformResponse: responseData => {
return usersAdapter.setAll(initialState, responseData)
},
providesTags: (result, error, arg) => [
{ type: 'User', id: "LIST" },
...result.ids.map(id => ({ type: 'User', id }))
]
}),
getUserByUserId: builder.query({
query: id => `users/${id}`,
})
})
})
export const { useGetUsersQuery, useGetUserByUserIdQuery } = usersApiSlice
// returns the query result object
export const selectUsersResult = usersApiSlice.endpoints.getUsers.select()
// Creates memoized selector
const selectUsersData = createSelector( selectUsersResult,usersResult => usersResult.data)
//getSelectors creates these selectors and we rename them with aliases using destructuring
export const {
selectAll: selectAllUsers,
selectById: selectUserById,
selectIds: selectUserIds
// Pass in a selector that returns the posts slice of state
} = usersAdapter.getSelectors(state => selectUsersData(state) ?? initialState)
and she userslice.js
我的目标是添加 authslice
使用自定义还原器,当我致电登录时,该状态将被初始化,这是我尝试做的。
import { createSlice, createSelector,createEntityAdapter } from "@reduxjs/toolkit";
const usersAdapter = createEntityAdapter()
const initialState = usersAdapter.getInitialState({
user: null,
is_logged_in:false,
token:null
})
export const loginSlice = createSlice({
initialState,
name: 'userSlice',
reducers: {
logout: () => initialState,
setUser: (state, action) => {
state.user = action.payload.user,
state.token = action.payload.token,
state.is_logged_in = true
},
},
});
export default loginSlice.reducer;
export const { logout, setUser } = loginSlice.actions;
但是我很困惑如何将其称为还原器。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这很旧,但是如果有人找到这个。 进行此操作的方式
这就是您在rtk-Query API中
,然后在您的auth slice中
更多信息
您将令牌添加到每个HTTP请求中。
this is very old but in case anyone finds this. this is how you go about this
in your rtk-query API
then in your auth slice
more info Simulating Axios-like interceptors with a custom base query
you are adding the token to every HTTP request to the header.