新闻详情

新闻详情

首页 / 资讯中心 / 详情

React Context 跨层传值

发布时间:2026/10/2 8:28:05来源:尧图网络
React Context 跨层传值
React Context 跨层传值前置React useRef 与 DOM目标会建 Provider useContext知道什么时候不该用 Context。引言props 适合父子父把值传给直接孩子。跨很多层时顶栏主题开关 → 深层 Panel层层 props 叫prop drilling又吵又脆。Context做「依赖注入」上面 Provider 放一份值任意深层用useContext取中间组件不用接力。本篇 demo主题 light/darkToolbar切换Panel直接读主题变色。动手完整代码react2/11-context/democdreact2/11-context/demonpminstallnpmrun dev点「切换」看工具栏文案和面板底色一起变。1. 三步create → Provider → useContexttype Theme light | dark const ThemeCtx createContext{ theme: Theme; toggle: () void } | null(null) function ThemeProvider({ children }: { children: ReactNode }) { const [theme, setTheme] useStateTheme(light) const toggle () setTheme((t) (t light ? dark : light)) return ( ThemeCtx.Provider value{{ theme, toggle }} {children} /ThemeCtx.Provider ) } function useTheme() { const ctx useContext(ThemeCtx) if (!ctx) throw new Error(useTheme 必须在 ThemeProvider 内) return ctx }步骤干什么createContext建上下文默认值常用null配合自定义 hook 做「必须在 Provider 内」检查Provider value{...}把当前值注入子树useContext/useTheme消费封装 hook 可读性更好2. 深层组件直接消费function Toolbar() { const { theme, toggle } useTheme() return ( div classNamerow span当前主题{theme}/span button typebutton onClick{toggle}切换/button /div ) } function Panel() { const { theme } useTheme() return ( section style{{ background: theme dark ? #0f172a : #fff }} p深层组件也能读到 Context不必层层 props。/p /section ) } export default function App() { return ( ThemeProvider Toolbar / Panel / /ThemeProvider ) }App只包一层 Provider中间没有「theme 透传」。3. 适合 / 不适合适合不适合主题、locale、当前用户每个按键都变的表单字段依赖注入式配置只传一两层就能搞定的数据低频、横切关注点高频大树更新易牵动整棵消费者高频客户端状态 → 拆多个 Context或上 Zustand15 篇。服务端列表 / 详情 → TanStack Query07 篇别硬塞 Context。4. 常见坑做法问题Provider 外用useTheme拿到null/ 抛错检查挂载位置value{{ theme, toggle }}每次新建对象所有消费者可能跟着重渲染可useMemo稳住 value或拆成「状态 Context 派发 Context」什么都塞一个大 Context一处改、全家刷按域拆分用 Context 代替近距离 props过度设计可读性变差demo 在练什么createContext Provider 自定义useTheme跨组件读写主题无 props 钻取建立「低频横切用 Context」的选型直觉自己改一改再加一个LocaleContext或把value用useMemo包起来观察渲染。下一篇React useReducer 复杂状态
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

ax命令与agentic编排:Kubernetes workspace创建与故障排查 2026/10/2 9:16:29

ax命令与agentic编排:Kubernetes workspace创建与故障排查

1. 从“ax”这个标题说起:一个被低估的工程缩写第一次看到“ax”这个标题,很多人会一头雾水。它不像“Kubernetes 集群搭建”那样直白,也不像“Agentic RAG 实战”那样有明确的技术指向。但恰恰是这种极简的命名方式,在工程圈里反…

阅读更多 →
Openclaw接入钉钉飞书企业微信:一条命令部署AI智能体网关 2026/10/2 9:16:29

Openclaw接入钉钉飞书企业微信:一条命令部署AI智能体网关

先说一句实在话:如果你在2026年还在为“把AI接进钉钉、飞书、微信群”这件事手动写回调、调签名、维护长连接,那真的有点亏。Openclaw(社区里更常叫它 Clawdbot)这类开源AI智能体框架,已经把这摊事简化到了“一条部署命…

阅读更多 →
SC-FDE链路Matlab仿真:频域均衡与UW同步全解析 2026/10/2 9:16:22

SC-FDE链路Matlab仿真:频域均衡与UW同步全解析

SC-FDE 通信链路这东西,很多刚接触通信系统仿真的同学一听就觉得高深,实际上拆开来看就是一个"单载波传输 频域均衡"的组合体。我在做这个完整链路的 matlab 仿真时,最大的体会是:它比 OFDM 更容易上手,但坑…

阅读更多 →
Python电影数据可视化分析:从爬虫到图表全流程实战 2026/10/2 9:16:21

Python电影数据可视化分析:从爬虫到图表全流程实战

最近刚把一个基于 Python 的电影数据可视化分析系统完整跑通,从数据抓取、清洗入库、指标计算到可视化呈现,前后踩了不少坑,也沉淀出一套可以直接复用的方法。今天不聊虚的,直接把整个项目的设计思路、核心代码逻辑、参数选择、遇…

阅读更多 →
Block Design 的 Tcl 文件:从导出、修改到一键重建工程 2026/10/2 9:16:14

Block Design 的 Tcl 文件:从导出、修改到一键重建工程

做 FPGA 几年的人,应该都有过这种经历:工程里 Block Design 画了上百个 IP,连线连到眼睛花,某天想加一个 AXI 外设,又得在 GUI 里一通点。更麻烦的是团队协作,别人从版本库拉下来的工程,打开一看…

阅读更多 →
域控制器EMC设计全流程解析:从原理图到测试整改的实战经验 2026/10/2 9:16:14

域控制器EMC设计全流程解析:从原理图到测试整改的实战经验

1. 域控制器EMC设计:先弄明白你为什么总是被测试逼着改板做域控制器硬件这块儿的朋友,应该都有过类似的经历:原理图画完了,PCB布局布线也搞得差不多了,兴冲冲拿去打样,回板调试功能一切正常,结果…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉