安裝:yarn add redux react-redux
1、定義store文件 store.js
import { createStore } from 'redux'; import reducer from './reducer'; const configureStore = () => createStore(reducer) export default configureStore;
2、定義reducer文件 reducer.js
const initialState = { menuName: '首頁', current: '123123數據' } // eslint-disable-next-line import/no-anonymous-default-export export default (state = initialState, action) => { console.log('action', action) // 使用dispatch調用action中的方法會觸發更新state 獲取到action之后根據type的不同來更改不同的值 類似於action:{type: "SWITCH_MEUN", menuName: "訂單管理"} switch (action.type) { case 'SWITCH_MEUN': return { ...state, // 保存上一個狀態值的寫法 menuName: action.menuName } case 'SWITCH_CURRENT': return { ...state, // 保存上一個狀態值的寫法 current: action.current } default: return { ...state } } }
3、使用Provider包裹 index.js (入口文件)
import React from 'react'; import ReactDOM from 'react-dom'; import './index.css'; import App from './App'; import reportWebVitals from './reportWebVitals'; import { Provider } from 'react-redux' import configureStore from './store/index' const store = configureStore() ReactDOM.render( <React.StrictMode> <Provider store={store}> <App /> </Provider> </React.StrictMode>, document.getElementById('root') ); // If you want to start measuring performance in your app, pass a function // to log results (for example: reportWebVitals(console.log)) // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals reportWebVitals();
4、實際使用
使用useDispatch調用action修改數據
使用useSelector獲取數據
import React from 'react' import {useDispatch, useSelector} from 'react-redux' export default function Header() { const dispatch = useDispatch() const current = useSelector((state) => { return state.current }) const changeCurrent = ()=> { dispatch({ type: 'SWITCH_CURRENT', current: '修改后的current' }) } return ( <div> 子組件 <h3>{current}</h3> <button onClick={changeCurrent}>修改current</button> </div> ) }
以下是redux devtools的使用
在google應用商店下載好redux devtools插件之后
https://blog.csdn.net/applebomb/article/details/54918659