React Store及store持久化的使用教程
1.安裝
npm insatll react-redux npm install @reduxjs/toolkit npm install redux-persist
2. 使用React Toolkit創(chuàng)建counterStore并配置持久化
store/modules/counterStore.ts:
import { createSlice } from '@reduxjs/toolkit' // 定義狀態(tài)類型 interface Action { payload:number, type: string } interface State { count: number } export const counterStore = createSlice({ // 模塊名稱獨(dú)一無(wú)二 name: 'counter', // 初始數(shù)據(jù) initialState: { count: 1 }, // 修改數(shù)據(jù)的同步方法 reducers: { increment: (state:State) => { state.count += 1 }, decrement: (state:State) => { state.count -= 1 }, incrementNum: (state:State, action: Action) => { state.count += action.payload } } }) // 導(dǎo)出 export const { increment, decrement, incrementNum } = counterStore.actions export default counterStore.reducer
store/index.ts:
import { configureStore, combineReducers } from '@reduxjs/toolkit' import counterReducer from './modules/counterStore' import { persistStore, persistReducer } from 'redux-persist' // 選擇持久化存儲(chǔ)引擎,如 localStorage 或 AsyncStorage import storage from 'redux-persist/lib/storage' // 默認(rèn)使用localStorage作為存儲(chǔ)引擎 // 組合各個(gè)模塊的reducer const reducer = combineReducers({ counter: counterReducer }) // 配置持久化設(shè)置 const persistConfig = { key: 'root', // 存儲(chǔ)的鍵名 storage // 持久化存儲(chǔ)引擎 // 可選的配置項(xiàng),如白名單、黑名單等 選其一就好了 // blacklist:['test'], // 只有 test 不會(huì)被緩存 // whitelist: ["test"], // 只有 test 會(huì)被緩存 } const persistedReducer = persistReducer(persistConfig, reducer) export const store = configureStore({ reducer: persistedReducer, // 注冊(cè)子模塊 middleware: (getDefaultMiddleware) => getDefaultMiddleware({ serializableCheck: false // 關(guān)閉默認(rèn)的序列化檢查//關(guān)閉嚴(yán)格模式 }) }) export const persistor = persistStore(store)
3. 為React注入store
react-redux負(fù)責(zé)把Redux和React 鏈接 起來(lái),內(nèi)置 Provider組件,通過(guò) store 參數(shù)把創(chuàng)建好的store實(shí)例注入到應(yīng)用中,鏈接正式建立
main.tsx:
import ReactDOM from 'react-dom/client' import App from './App' import { BrowserRouter } from "react-router-dom" import { Provider } from 'react-redux' import {store, persistor } from "@/store" // store持久化 import { PersistGate } from 'redux-persist/integration/react' ReactDOM.createRoot(document.getElementById('root')!).render( <Provider store={store}> {/* 注入router實(shí)例 */} <BrowserRouter> <PersistGate loading={null} persistor={persistor}> <App /> </PersistGate> </BrowserRouter> </Provider> )
4. React組件使用store中的數(shù)據(jù)
useSelector,作用:在函數(shù)組件中獲取redux數(shù)據(jù)存儲(chǔ)對(duì)象中的某個(gè)數(shù)據(jù)
useDispatch,作用: 在函數(shù)組件中獲取dipatch方法(用于發(fā)送action給reducer函數(shù))
import React from "react"; import { useDispatch,useSelector } from "react-redux"; import { increment, decrement, incrementNum } from '@/store/modules/counterStore' const App: React.FC = () => { const dispatch = useDispatch() const { count } = useSelector((state:any) => state.counter) return ( <div> <div>{count}</div> <button onClick={() => {dispatch(increment())}}>加1</button> <button onClick={() => {dispatch(decrement())}}>減1</button> <button onClick={() => {dispatch(incrementNum(5))}}>加5</button> </div> ); }; export default App;
這樣刷新之后數(shù)據(jù)就不會(huì)初始化了
到此這篇關(guān)于React Store及store持久化的使用的文章就介紹到這了,更多相關(guān)React Store使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
React styled-components設(shè)置組件屬性的方法
這篇文章主要介紹了styled-components設(shè)置組件屬性的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08React實(shí)現(xiàn)Vue的watch監(jiān)聽(tīng)屬性方式
這篇文章主要介紹了React實(shí)現(xiàn)Vue的watch監(jiān)聽(tīng)屬性方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01深入理解react-router 路由的實(shí)現(xiàn)原理
這篇文章主要介紹了深入理解react-router 路由的實(shí)現(xiàn)原理,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-09-09React 進(jìn)入頁(yè)面后自動(dòng) focus 到某個(gè)輸入框的解決方案
React.js 當(dāng)中提供了 ref 屬性來(lái)幫助我們獲取已經(jīng)掛載的元素的 DOM 節(jié)點(diǎn),你可以給某個(gè) JSX 元素加上 ref屬性,這篇文章主要介紹了React 進(jìn)入頁(yè)面以后自動(dòng) focus 到某個(gè)輸入框,需要的朋友可以參考下2024-02-02create-react-app修改為多頁(yè)面支持的方法
本篇文章主要介紹了create-react-app修改為多頁(yè)面支持的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05