📅  最后修改于: 2023-12-03 15:19:47.779000             🧑  作者: Mango
在传统的 Redux 代码中,我们需要定义多个 action、reducer 和 store。这样的代码比较冗长,而且需要写很多重复的代码。Redux Toolkit (RTK) 是一个帮助开发人员更快速、更高效地编写 Redux 代码的工具。
可以通过以下命令来安装 Redux Toolkit:
npm install @reduxjs/toolkit
使用 RTK,我们可以用 createSlice
来替代手动编写 action 和 reducer,这可以让我们更快速地编写 Redux 代码。以下是如何使用 createSlice
的示例代码:
import { createSlice } from '@reduxjs/toolkit';
const initialState = {
value: 0,
};
export const counterSlice = createSlice({
name: 'counter',
initialState,
reducers: {
increment: (state) => {
state.value += 1;
},
decrement: (state) => {
state.value -= 1;
},
},
});
export const { increment, decrement } = counterSlice.actions;
export default counterSlice.reducer;
代码解释:
createSlice
工具。counter
的 slice,并定义了 initialState
。reducers
中定义了从 state
到下一个 state
的转换函数。increment
和 decrement
) 和声明的 reducer 函数。使用了 createSlice
后,我们无需再通过 switch
语句和 case
来手动处理 action。这样的代码可以更容易地维护和扩展。
Redux Toolkit 还为我们提供了一个名为 createAsyncThunk
的工具,可以使我们更方便地处理异步操作。以下是使用 createAsyncThunk
的示例代码:
import { createAsyncThunk, createSlice } from '@reduxjs/toolkit';
import { userAPI } from '../../api/userAPI';
export const getUserById = createAsyncThunk(
'users/getUserById',
async (userId) => {
const response = await userAPI.getUserById(userId);
return response.data;
}
);
const userSlice = createSlice({
name: 'users',
initialState: {
entities: {},
loading: false,
},
reducers: {},
extraReducers: (builder) => {
builder
.addCase(getUserById.pending, (state) => {
state.loading = true;
})
.addCase(getUserById.fulfilled, (state, action) => {
state.entities[action.payload.id] = action.payload;
state.loading = false;
});
},
});
export default userSlice.reducer;
代码解释:
createAsyncThunk
和 createSlice
工具。users
的 slice,并定义了 initialState
。getUserById
,并定义了其参数和返回值。extraReducers
中处理了 getUserById
的三种状态:pending
、fulfilled
和 rejected
。在本例中,只在 pending
和 fulfilled
状态下更新了 state
。使用了 createAsyncThunk
后,我们就可以更容易地处理异步操作,将异步操作状态与数据的更新分离开来。
在您的 React 项目中,我们可以使用 configureStore
函数,使用 combineReducers
合并多个 reducer
,使用中间件和 devToolsEnhancer
等功能。以下是如何在 React 中使用 Redux Toolkit 的示例代码:
import { configureStore } from '@reduxjs/toolkit';
import { combineReducers } from 'redux';
import counterReducer from '../features/counter/counterSlice';
import userReducer from '../features/user/userSlice';
const rootReducer = combineReducers({
counter: counterReducer,
user: userReducer,
});
const store = configureStore({
reducer: rootReducer,
middleware: (getDefaultMiddleware) => getDefaultMiddleware(),
devTools: process.env.NODE_ENV !== 'production',
});
export default store;
代码解释:
configureStore
、combineReducers
和两个声明的 reducer
。combineReducers
合并多个 reducer
,导出了一个 rootReducer
。configureStore
函数创建了一个 store
,并传入了 rootReducer
和 middleware 配置(此例中为默认配置)。store
。使用了 configureStore
后,我们可以更方便地创建 Redux store,并且无需再手动使用中间件和 devToolsEnhancer
。
使用 Redux Toolkit,我们可以更高效地编写 Redux 代码,并且无需过多担心单向数据流和数据同步等问题。读者可以在自己的 React 项目中使用 Redux Toolkit 来提高开发效率和代码可维护性。