当前位置:首页 > React

react redux实现

2026-01-26 14:54:33React

Redux 核心概念

Redux 是一个状态管理库,适用于 React 及其他 JavaScript 应用。其核心概念包括:

  • Store:单一数据源,存储整个应用的状态。
  • Action:描述状态变化的普通对象,必须包含 type 字段。
  • Reducer:纯函数,接收当前状态和 Action,返回新状态。
  • Dispatch:触发 Action 的方法,通知 Redux 更新状态。

安装依赖

在 React 项目中集成 Redux 需要安装以下包:

npm install redux react-redux @reduxjs/toolkit

@reduxjs/toolkit 是官方推荐的简化 Redux 开发的工具包。

创建 Redux Store

使用 @reduxjs/toolkitconfigureStore 创建 Store:

react redux实现

// store.js
import { configureStore } from '@reduxjs/toolkit';
import counterReducer from './features/counterSlice';

export const store = configureStore({
  reducer: {
    counter: counterReducer,
  },
});

创建 Slice

Slice 是 Redux Toolkit 提供的简化 Reducer 和 Action 创建的 API:

// features/counterSlice.js
import { createSlice } from '@reduxjs/toolkit';

export const counterSlice = createSlice({
  name: 'counter',
  initialState: { value: 0 },
  reducers: {
    increment: (state) => {
      state.value += 1;
    },
    decrement: (state) => {
      state.value -= 1;
    },
  },
});

export const { increment, decrement } = counterSlice.actions;
export default counterSlice.reducer;

连接 React 组件

通过 react-redux 提供的 Provider 和 Hooks 连接组件:

react redux实现

// main.jsx
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')
);

在组件中使用状态和 Action

使用 useSelectoruseDispatch Hooks 访问状态和触发 Action:

// Counter.jsx
import React from 'react';
import { useSelector, useDispatch } from 'react-redux';
import { increment, decrement } from './features/counterSlice';

function Counter() {
  const count = useSelector((state) => state.counter.value);
  const dispatch = useDispatch();

  return (
    <div>
      <button onClick={() => dispatch(decrement())}>-</button>
      <span>{count}</span>
      <button onClick={() => dispatch(increment())}>+</button>
    </div>
  );
}

export default Counter;

异步操作处理

使用 createAsyncThunk 处理异步逻辑(如 API 调用):

// features/userSlice.js
import { createSlice, createAsyncThunk } from '@reduxjs/toolkit';
import axios from 'axios';

export const fetchUser = createAsyncThunk('user/fetchUser', async () => {
  const response = await axios.get('/api/user');
  return response.data;
});

const userSlice = createSlice({
  name: 'user',
  initialState: { data: null, status: 'idle' },
  extraReducers: (builder) => {
    builder
      .addCase(fetchUser.pending, (state) => {
        state.status = 'loading';
      })
      .addCase(fetchUser.fulfilled, (state, action) => {
        state.status = 'succeeded';
        state.data = action.payload;
      });
  },
});

export default userSlice.reducer;

中间件配置

Redux Toolkit 默认包含常用中间件(如 redux-thunk)。如需自定义,通过 configureStoremiddleware 参数添加:

const store = configureStore({
  reducer: rootReducer,
  middleware: (getDefaultMiddleware) =>
    getDefaultMiddleware().concat(loggerMiddleware),
});

性能优化

  • 记忆化 Selector:使用 reselectcreateSelector 避免不必要的计算。
  • 批量更新:减少频繁的 dispatch 调用,合并相关 Action。

以上步骤覆盖了 React 中 Redux 的基本实现流程,包括状态管理、异步处理和性能优化。

标签: reactredux
分享给朋友:

相关文章

react 如何引入jquery

react 如何引入jquery

引入 jQuery 到 React 项目 在 React 项目中引入 jQuery 可以通过多种方式实现,但需要注意 React 和 jQuery 操作 DOM 的方式可能冲突,因此建议仅在必要时使用…

react如何更新

react如何更新

更新 React 版本的方法 检查当前 React 版本 运行以下命令查看项目中安装的 React 版本: npm list react 更新 React 及相关依赖 通过 npm 或 yarn…

react如何重置

react如何重置

重置 React 应用的状态 使用 useState 钩子重新初始化状态变量是最直接的方法。将状态变量重置为初始值或空值即可完成重置。 const [count, setCount] = useSt…

react如何发布

react如何发布

发布React应用的步骤 构建生产版本 使用以下命令生成优化后的生产版本代码,代码会被压缩并移除开发环境中的调试工具: npm run build 构建完成后会生成build文件夹,包含所有静态资源…

react路由如何刷新

react路由如何刷新

React 路由刷新方法 在 React 中,路由刷新通常涉及以下几种场景和解决方案: 强制重新加载当前页面 使用 window.location.reload() 可以强制刷新整个页面,但会丢失…

如何运行react项目

如何运行react项目

运行React项目的步骤 确保已安装Node.js(建议版本12或更高)和npm/yarn。若未安装,可从Node.js官网下载。 全局安装create-react-app脚手架工具(若已安装可跳过…