# 前言
在[前一章節](https://hackmd.io/@iris-yu17/redux_6),我們介紹了`redux-toolkit` 的使用步驟,並創建了 cake feature。在這章節,我們再加上 iceCream feature。
demo: https://codesandbox.io/p/sandbox/redux-6-redux-toolkit-yyy4r2
## - step1. create iceCreamSlice
1. 在 `/features/iceCream` 下創建 `iceCreamSlice.js`
2. 引入 `createSlice`
```javascript=1
const createSlice = require("@reduxjs/toolkit").createSlice;
```
## - step2. 使用 `createSlice`
1. 設定 `slice` 名稱為 `iceCream`
2. 設置初始狀態
```javascript=1
const iceCreamSlice = createSlice({
name: "iceCream",
initialState: {
numOfIceCream: 10,
},
});`
```
## - step3. 定義 reducer
```javascript=1
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;
},
},
});
```
## - step4. export reducer 和 action
```javascript=1
module.exports = iceCreamSlice.reducer;
module.exports.iceActions = iceCreamSlice.actions;
```
## - step5. 在 `store.js` 裡設置 reducer
```javascript=1
// 1. 引入 reducer
const iceCreamReducer = require("../features/iceCream/iceCreamSlice");
const store = configureStore({
reducer: {
cake: cakeReducer,
// 2. 設置
iceCream: iceCreamReducer,
},
});
```
## - step6. 在 `index.js` 裡使用
```javascript=1
// 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,如下:
```javascript=1
const reducers = combineReducers({
cake: cakeReducer,
iceCream: iceCreamReducer
});
```
在 `redux-toolkit` 裡,`configureStore` 會直接幫我們做這件事。
> 參考資料: https://www.youtube.com/watch?v=Q-KZCLu5cbI&list=PLC3y8-rFHvwiaOAuTtVXittwybYIorRB3&index=21