基本步驟
安裝套件
npm i @reduxjs/toolkit react-redux
設置slice檔案,裡頭包含
設置store檔案
讀取或更新Redux store中的資料
實際範例
若要在網頁中使用 Redux 管理電商網站裡 cartItems
的狀態,可以使用 Redux Toolkit 中的 createSlice
函式。
下面舉例說明如何創建管理 cartItems
狀態的 cartSlice
:
import { createSlice } from '@reduxjs/toolkit';
const cartSlice = createSlice({
name: 'cart',
initialState: {
cartItems: [],
},
reducers: {
addItem: (state, action) => {
state.cartItems.push(action.payload);
},
removeItem: (state, action) => {
state.cartItems = state.cartItems.filter(
item => item.id !== action.payload.id
);
},
},
});
export const { addItem, removeItem } = cartSlice.actions; //action creators
export default cartSlice.reducer; //root reducer
在範例中,我們用 createSlice
創建了 cartSlice
。將一個object傳遞給 createSlice
,定義slice的名稱、初始狀態和其 reducers。我們定義了兩個 reducers,addItem
和 removeItem
,這讓我們對購物車添加和刪除項目。
創建slice後,就可以將reducer 傳遞給 Redux Toolkit 的 configureStore
函式以創建 Redux store。
import {configureStore } from '@reduxjs/toolkit';
import cartReducer from './cartSlice';
const store = configureStore({
reducer: {
cart: cartReducer,
},
});
export default store;
最後,可以使用 react-redux
中的 useSelector
在組件中訪問 cartItems
的狀態。或是用useDispatch
來更新Redux store中的state
import React from 'react';
import {useSelector,useDispatch } from 'react-redux';
import {addItem} from "./cartSlice"
const Cart = () => {
const cartItems = useSelector(state => state.cart.cartItems);
const newItem = {id:1,name:"Apple"}
const dispatch = useDispatch();
dispatch(addItem(newItem))
// ...
};
Redux Persist 是一個library,它允許你將 Redux store中的資料保存在能長久儲存的空間中,例如瀏覽器的localStorage,這樣即使在瀏覽器刷新或關閉後也能保留應用程序的state。
基本步驟
npm install redux-persist
persistConfig
object,指定 Redux Persist 的key和storage option 。key應該是獨一無二的,而存儲選項可以設置成 storage
存在localStorage。persistConfig
和root reducer
作為參數傳入 persistReducer
函式,以定義persistedReducer。configureStore
函式。最後使用 persistStore
函式來創建一個 persistor
。到這裡Redux store就算設置完成import { configureStore } from '@reduxjs/toolkit';
import { persistStore, persistReducer } from 'redux-persist';
import storage from 'redux-persist/lib/storage';
import rootReducer from './reducers';
const persistConfig = {
key: 'root',
storage,
};
const persistedReducer = persistReducer(persistConfig, rootReducer);
export const store = configureStore({
reducer: persistedReducer,
});
export const persistor = persistStore(store);
PersistGate
元件來包裹我們的的應用程式,並將 persistor
作為 prop 傳入在React root component (通常是index.js)使用 PersistGate
元件
import React from 'react';
import { Provider } from 'react-redux';
import { PersistGate } from 'redux-persist/integration/react';
import { store, persistor } from './store';
import App from './App';
const root = createRoot(document.getElementById("root"));
root.render(
<Provider store={store}>
<PersistGate persistor={persistor}>
<App />
</PersistGate>
</Provider>
);
以上就是Redux和Redux-persist的基本操作
參考文章:
以上若有任何錯誤或建議,都歡迎留言給我,謝謝😄