React使用Redux实现组件通信的项目实践

 更新时间:2025年09月17日 10:47:51   作者:柯南二号  
本文主要介绍了React使用Redux实现组件通信的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在 React 项目中,父子组件通信通常依赖 props,兄弟组件通信则通过 状态提升Context。但是当应用逐渐复杂时,这种方式会显得繁琐。此时 Redux 就派上用场了 —— 它可以集中管理全局状态,任何组件都能方便地订阅和修改状态。

本文将带你实现一个简单的 计数器 demo,演示 Redux 在 React 中的组件通信。

一、环境准备

安装必要依赖:

npm install @reduxjs/toolkit react-redux

Redux Toolkit(RTK)是 Redux 官方推荐的写法,简化了很多冗余代码。

二、目录结构

src/
  store.ts
  features/
    counter/
      counterSlice.ts
      CounterA.tsx
      CounterB.tsx
  App.tsx
  index.tsx
  hooks.ts

这里我们会写两个兄弟组件:CounterACounterB,通过 Redux 实现通信。

三、配置 Redux Store

src/store.ts

import { configureStore } from "@reduxjs/toolkit";
import counterReducer from "./features/counter/counterSlice";

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

export type RootState = ReturnType<typeof store.getState>;
export type AppDispatch = typeof store.dispatch;

四、定义 Slice(状态逻辑)

src/features/counter/counterSlice.ts

import { createSlice, PayloadAction } from "@reduxjs/toolkit";
import { RootState } from "../../store";

interface CounterState {
  value: number;
}

const initialState: CounterState = { value: 0 };

const counterSlice = createSlice({
  name: "counter",
  initialState,
  reducers: {
    increment: (state) => {
      state.value += 1;
    },
    decrement: (state) => {
      state.value -= 1;
    },
    addBy: (state, action: PayloadAction<number>) => {
      state.value += action.payload;
    },
  },
});

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

// 选择器
export const selectCount = (state: RootState) => state.counter.value;

五、封装 Typed Hooks(TS推荐)

src/hooks.ts

import { TypedUseSelectorHook, useDispatch, useSelector } from "react-redux";
import type { RootState, AppDispatch } from "./store";

export const useAppDispatch = () => useDispatch<AppDispatch>();
export const useAppSelector: TypedUseSelectorHook<RootState> = useSelector;

六、兄弟组件通信示例

CounterA.tsx

import React from "react";
import { useAppDispatch } from "../../hooks";
import { increment, addBy } from "./counterSlice";

export default function CounterA() {
  const dispatch = useAppDispatch();

  return (
    <div style={{ border: "1px solid #ccc", padding: 10, margin: 10 }}>
      <h3>我是 CounterA</h3>
      <button onClick={() => dispatch(increment())}>+1</button>
      <button onClick={() => dispatch(addBy(5))}>+5</button>
    </div>
  );
}

CounterB.tsx

import React from "react";
import { useAppSelector } from "../../hooks";
import { selectCount } from "./counterSlice";

export default function CounterB() {
  const count = useAppSelector(selectCount);

  return (
    <div style={{ border: "1px solid #ccc", padding: 10, margin: 10 }}>
      <h3>我是 CounterB</h3>
      <p>当前计数:{count}</p>
    </div>
  );
}

七、应用入口

App.tsx

import React from "react";
import CounterA from "./features/counter/CounterA";
import CounterB from "./features/counter/CounterB";

export default function App() {
  return (
    <div style={{ padding: 20 }}>
      <h2>Redux 通信 Demo</h2>
      <CounterA />
      <CounterB />
    </div>
  );
}

index.tsx

import React from "react";
import { createRoot } from "react-dom/client";
import { Provider } from "react-redux";
import { store } from "./store";
import App from "./App";

const root = createRoot(document.getElementById("root")!);
root.render(
  <Provider store={store}>
    <App />
  </Provider>
);

八、运行效果

  1. 点击 CounterA 中的 +1+5 按钮,会触发 Redux 的 dispatch,修改全局状态。
  2. CounterB 会实时响应,展示最新的计数值。

👉 这就实现了 兄弟组件通信,而且随着应用规模扩大,你只需要在需要的地方使用 Redux,不再需要复杂的 props 传递。

九、总结

  • 父子通信:直接用 props。
  • 兄弟通信:Redux 是一种集中化管理方式,适合跨层级或复杂场景。
  • Redux Toolkit 简化了 reducer 和 action 的写法,官方推荐。
  • 在更大规模应用中,还可以结合 Redux Persist(持久化存储)、RTK Query(数据请求管理)。

到此这篇关于React使用Redux实现组件通信的项目实践的文章就介绍到这了,更多相关React Redux 组件通信内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • React Fiber 架构解决页面卡顿问题的全过程

    React Fiber 架构解决页面卡顿问题的全过程

    本文从问题与目标、核心数据结构、调度与中断、渲染阶段与提交阶段、优先级与 lanes、并发特性到常见误区与优化建议,全景式拆解 React Fiber,为何它能够显著降低交互卡顿并提升可响应性,感兴趣的朋友跟随小编一起看看吧
    2025-12-12
  • React中的ref属性的使用示例详解

    React中的ref属性的使用示例详解

    React 提供了 refrefref 属性,让我们可以引用组件的实例或者原生 DOM 元素,使用 refrefref,可以在父组件中调用子组件暴露出来的方法,或者调用原生 element 的 API,这篇文章主要介绍了React中的ref属性的使用,需要的朋友可以参考下
    2023-04-04
  • 详解react实现插槽slot功能

    详解react实现插槽slot功能

    本文主要介绍了详解react实现插槽slot功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-09-09
  • React Native 搭建开发环境的方法步骤

    React Native 搭建开发环境的方法步骤

    本篇文章主要介绍了React Native 搭建开发环境的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • react context优化四重奏教程示例

    react context优化四重奏教程示例

    这篇文章主要为大家介绍了react context优化四重奏教程示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • React 使用recharts实现散点地图的示例代码

    React 使用recharts实现散点地图的示例代码

    这篇文章主要介绍了React 使用recharts实现散点地图的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • react-draggable实现拖拽功能实例详解

    react-draggable实现拖拽功能实例详解

    这篇文章主要给大家介绍了关于react-draggable实现拖拽功能的相关资料,React-Draggable一个使元素可拖动的简单组件,文中通过代码示例介绍的非常详细,需要的朋友可以参考下
    2023-08-08
  • react-redux action传参及多个state处理的实现

    react-redux action传参及多个state处理的实现

    本文主要介绍了react-redux action传参及多个state处理的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • react-router-dom5如何升级到6

    react-router-dom5如何升级到6

    这篇文章主要介绍了react-router-dom5如何升级到6问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • React 中使用 RxJS 优化数据流的处理方案

    React 中使用 RxJS 优化数据流的处理方案

    这篇文章主要为大家介绍了React 中使用 RxJS 优化数据流的处理方案示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02

最新评论