React Redux 是 React 生态中用于管理应用状态的一个库,它与 Redux 结合使用,通过将组件的 state
抽离到一个全局的 store 中进行集中管理。以下是一个简单的 React Redux 使用步骤和代码示例:
步骤1:安装依赖
首先确保你已经安装了 react 和 react-redux 包:
npm install react react-dom redux react-redux --save
或者
yarn add react react-dom redux react-redux
步骤2:创建 Redux Store
在 Redux 中,你需要创建一个 Store,它包含应用的所有状态(state)以及处理这些状态变化的方法。
// src/store.js
import { createStore } from 'redux';
import rootReducer from './reducers'; // 导入 Reducer 文件
const initialState = { count: 0 }; // 初始状态
const store = createStore(rootReducer, initialState);
export default store;
步骤3:编写 Reducer
Reducer 是纯函数,它接收当前的 state 和 action,并根据 action 返回新的 state。
// src/reducers/index.js
import { INCREMENT, DECREMENT } from './actionsTypes'; // 假设我们定义了action类型
const initialState = { count: 0 };
function counterReducer(state = initialState, action) {
switch (action.type) {
case INCREMENT:
return { ...state, count: state.count + 1 };
case DECREMENT:
return { ...state, count: state.count - 1 };
default:
return state;
}
}
export default counterReducer;
步骤4:创建 Actions 和 Action Creators
Action 是描述发生什么的对象,而 Action Creator 是生成这些对象的函数。
// src/actions/index.js
export const INCREMENT = 'INCREMENT';
export const DECREMENT = 'DECREMENT';
export function increment() {
return { type: INCREMENT };
}
export function decrement() {
return { type: DECREMENT };
}
步骤5:使用 Provider 将 Store 提供给整个应用
在根组件中包裹 ,使其子组件能够访问到 store。
// src/index.js
import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import store from './store';
import App from './App';
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById('root')
);
步骤6:在 React 组件中连接 Redux(使用 connect)
使用 connect 高阶函数将 Redux 的 state 和 dispatch 映射到 React 组件的 props 上。
// src/components/Counter.js
import React from 'react';
import { useSelector, useDispatch } from 'react-redux';
import { increment, decrement } from '../actions';
function Counter() {
const count = useSelector(state => state.count); // 从 Redux store 获取 count
const dispatch = useDispatch(); // 获取 dispatch 方法以触发 action
return (
<div>
<p>Count: {count}</p>
<button onClick={() => dispatch(increment())}>+</button>
<button onClick={() => dispatch(decrement())}>-</button>
</div>
);
}
export default Counter;
或者,如果你更喜欢传统的 mapStateToProps 和 mapDispatchToProps 方式:
import { connect } from 'react-redux';
import { increment, decrement } from '../actions';
function Counter({ count, onIncrement, onDecrement }) {
return (
<div>
<p>Count: {count}</p>
<button onClick={onIncrement}>+</button>
<button onClick={onDecrement}>-</button>
</div>
);
}
const mapStateToProps = state => ({
count: state.count,
});
const mapDispatchToProps = dispatch => ({
onIncrement: () => dispatch(increment()),
onDecrement: () => dispatch(decrement()),
});
export default connect(mapStateToProps, mapDispatchToProps)(Counter);
以上就是一个基于 React Redux 的基本计数器应用实现过程,包含了 Redux 的核心概念和使用方式。实际项目中,Redux 还可能结合中间件如 redux-thunk 来处理异步逻辑等更复杂的应用场景。