当前位置:首页 > 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

电脑如何安装react

安装 Node.js 和 npm React 项目依赖 Node.js 环境,需先安装 Node.js(自带 npm)。访问 Node.js 官网 下载 LTS 版本,运行安装程序并完成配置。安装后,…

如何监控react性能

如何监控react性能

使用 React Profiler API React 16.5 及以上版本内置了 Profiler API,可直接测量组件渲染时间。通过 <React.Profiler> 包裹目标组件,…

react如何重写alert

react如何重写alert

重写 React 中的 alert 方法 在 React 中,直接使用原生 alert 会破坏用户体验,通常需要自定义弹窗组件替代。以下是实现方法: 使用自定义弹窗组件 创建可复用的弹窗组件,替代原…

如何设计react组件

如何设计react组件

设计 React 组件的核心原则 React 组件的设计需要遵循高内聚、低耦合的原则,确保组件功能独立且易于维护。组件的设计可以分为展示组件和容器组件两类,展示组件负责 UI 渲染,容器组件负责逻辑处…

如何调试react源码

如何调试react源码

调试React源码的方法 克隆React源码仓库到本地: git clone https://github.com/facebook/react.git cd react 安装依赖并构建开发版本:…

react 如何渲染的

react 如何渲染的

React 渲染机制 React 的渲染过程分为两个主要阶段:协调(Reconciliation)和提交(Commit)。协调阶段负责计算差异(Diffing),提交阶段将变化应用到 DOM。 虚拟…