当前位置: 首页 > news >正文

网站备案是怎么回事乐从网站开发

网站备案是怎么回事,乐从网站开发,中国软件公司有哪些,宝塔系统怎么建设网站React 使用 Redux 实现组件通信的 Demo 示例 在 React 项目中,父子组件通信通常依赖 props,兄弟组件通信则通过 状态提升 或 Context。但是当应用逐渐复杂时,这种方式会显得繁琐。此时 Redux 就派上用场了 —— 它可以集中管理全局状态&#…

React 使用 Redux 实现组件通信的 Demo 示例

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

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


一、环境准备

安装必要依赖:

npm install @reduxjs/toolkit react-redux

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


二、目录结构

src/store.tsfeatures/counter/counterSlice.tsCounterA.tsxCounterB.tsxApp.tsxindex.tsxhooks.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(数据请求管理)。

http://www.dtcms.com/a/571219.html

相关文章:

  • 站长工具端口扫描视频在线观看网站怎么建设
  • 中投中原建设有限公司网站网页界面设计作品推荐
  • 网站备案百度站长提交网站如何制作建设
  • 做商务网站要多少钱免费网站自助制作
  • 浦江网站建设大宗商品一览表
  • 提升网站收录行业论坛网站
  • 常熟港口建设费申报网站刷题网站怎么做
  • 怎么用word做网站中国机械加工网1717
  • 公司网站制作站制作wordpress标签是什么
  • 互网站开发维护成本高网站定时数据切换怎么做的
  • 网站建设redu大秦建设集团有限责任公司官方网站
  • 被黑的网站创办一个网站
  • C++ 大数乘法
  • 个人网站设计源代码互联网营销是干什么
  • 个人网站怎么制作教程社区推广活动方案
  • 电子商务是建网站如何免费建网站赚钱
  • 广州市建设网站wordpress网站报价
  • 用户需求与业务目标冲突时该如何取舍
  • 乡镇中心小学校园网站建设指南淘宝网站怎么做网站
  • 上海 响应式网站公司国际新闻界官网
  • 贵州省建设学校官方网站想找个人做网站
  • 阿里云服务器wordpress建站教程网站建设的方法有四种
  • 网站备案 多少钱深圳罗湖网站设计公司价格
  • 建德市建设局网站以公司名称为后缀的邮箱
  • 探索Python的新特性:最新版本带来了什么?
  • 什么好的网站学做食品网站推广平台有哪些
  • 揭阳高端网站建设价格网站设计制作方案
  • 广西建设主管部门网站北京新鸿儒做的网站
  • 解决代理环境下NETIO.SYS引发的蓝屏问题:切换至TDI驱动
  • 南头做网站公司许昌seo推荐