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

运行 React 项目的步骤 安装 Node.js 和 npm 确保系统已安装 Node.js(包含 npm)。可通过官网 Node.js 下载并安装最新稳定版本。安装完成后,验证版本: node…

react如何循环

react如何循环

循环渲染列表 在React中循环渲染列表通常使用map方法,这是最常用的方式。通过map可以将数组中的每个元素转换为React元素并渲染到页面上。 const items = ['Apple', '…

java如何react

java如何react

在Java中使用React 要在Java项目中集成React,通常需要将React前端与Java后端结合使用。以下是几种常见的方法: 使用Spring Boot作为后端 Spring Boot是一个…

react如何减少setState

react如何减少setState

减少 React 中 setState 调用的方法 合并多次状态更新 使用函数式更新方式合并多次 setState 调用。React 会将多次状态更新批量处理,避免不必要的重新渲染。 // 非函…

react如何创建项目

react如何创建项目

使用 Create React App 创建项目 Create React App (CRA) 是官方推荐的 React 项目脚手架工具,适合快速初始化一个现代化的 React 项目。 安装 C…

如何外部访问react

如何外部访问react

外部访问 React 应用的方法 配置代理服务器 在开发环境中,可以通过配置代理服务器解决跨域问题。修改 package.json 文件,添加 proxy 字段指向后端 API 地址: "proxy…