redux是一个状态管理框架,它可以帮助我们清晰定义state和处理函数,提高可读性,并且redux中的状态是全局共享,规避组件间通过props传递状态等操作。
快速使用
在React应用的根节点,需要借助React的Context机制存放整个store信息。需要进行以下配置。
index.js
javascript
import React from 'react'
import ReactDOM from 'react-dom'
import {Provider} from 'react-redux'
import {store} from './store'
import App from './app'
const rootElement = document.getElementById('root');
ReactDOM.render(
<Provider store = {store}>
<App/>
</Provider>,
rootElement
)
store文件需要配置下Redux,包括reducer和action以及state
store.js
javascript
import {createStore} from 'redux'
const initialState = {value: 0}
// Reducer
function counterReducer(state = initialState, action){
switch (action.type){
case 'counter/incremented':
return {value: state.value + 1};
case 'counter/decremented':
return {value: state.value - 1};
default:
return state
}
}
// Action
export const incrementAction = {type:'counter/incremented'}
export const decrementAction = {type: 'counter/decremented'}
// Redux 定义
export const store = createStore(counterReducer)
在业务逻辑中,需要通过useSelector和useDispatch自定义hook获取state和dispatch
Counter.js
javascript
import React from 'react'
import {useDispatch, useSelector} from 'react-redux'
import {decrementAction, incrementAction} from "./store";
export function Counter() {
const count = useSelector(state => state.value)
const dispatch = useDispatch()
return (
<div>
<button onClick={() => dispatch(incrementAction)}>
+
</button>
<span>{count}</span>
<button onClick={() => dispatch(decrementAction)}>
-
</button>
</div>
)
}