loading...
上次更新: 2024-05-10
Demo: https://codesandbox.io/p/sandbox/redux-6-redux-toolkit-yyy4r2
在前一章節,我們介紹了 redux-toolkit 的使用步驟,並創建了 cake feature。在這章節,我們再加上 iceCream feature。
/features/iceCream 下創建 iceCreamSlice.jscreateSliceconst createSlice = require("@reduxjs/toolkit").createSlice;createSliceslice 名稱為 iceCreamconst iceCreamSlice = createSlice({
name: "iceCream",
initialState: {
numOfIceCream: 10,
},
});`const iceCreamSlice = createSlice({
name: "iceCream",
initialState: {
numOfIceCream: 10,
},
reducers: {
order: (state, action) => {
state.numOfCakes -= action.payload.quantity;
},
restock: (state, action) => {
state.numOfCakes += action.payload.quantity;
},
},
});
module.exports = iceCreamSlice.reducer;
module.exports.iceActions = iceCreamSlice.actions;store.js 裡設置 reducer// 1. 引入 reducer
const iceCreamReducer = require("../features/iceCream/iceCreamSlice");
const store = configureStore({
reducer: {
cake: cakeReducer,
// 2. 設置
iceCream: iceCreamReducer,
},
});index.js 裡使用// 1. 引入 actions
const iceCreamActions = require("./features/iceCream/iceCreamSlice").iceCreamActions;
// 2. 發送 actions
store.dispatch(
iceCreamActions.order({
quantity: 10,
}),
);
store.dispatch(
iceCreamActions.restock({
quantity: 2,
}),
);結果
Updated State: { cake: { numOfCakes: 17 }, iceCream: { numOfIceCream: 10 } }
Updated State: { cake: { numOfCakes: 17 }, iceCream: { numOfIceCream: 0 } }
在純 redux 裡,會用 combineReducers 來合併多個 reducer,如下:
const reducers = combineReducers({
cake: cakeReducer,
iceCream: iceCreamReducer
});在 redux-toolkit 裡,configureStore 會直接幫我們做這件事。
參考資料: