完整的 React + Umi 状态体系全景图

🟦 initialState(Umi 应用级)

🟪 valtio(业务逻辑级)

🟩 useState(组件级)

🟥 redux/dva(传统集中式全局状态)

React + Umi 状态体系关系图(中文解释版)

┌────────────────────────────────────────────┐

│ 🌐 应用启动层(Umi 专用) │

│────────────────────────────────────────────│

│ 【initialState / setInitialState】 │

│ - 用于存放全局初始化数据(用户信息、配置) │

│ - 来源:Umi runtime 插件(getInitialState) │

│ - 生命周期:应用启动 → 全局共享 │

│ - 更新方式:setInitialState() │

│ - 特征:一次加载、全局可读、适合初始化数据 │

└────────────────────────────────────────────┘

│

▼

┌────────────────────────────────────────────┐

│ ⚙️ 业务逻辑层(响应式全局状态) │

│────────────────────────────────────────────│

│ 【valtio】 │

│ - Proxy 实现响应式,组件自动更新 │

│ - 无需 dispatch,直接修改对象即可 │

│ - 生命周期:全局可持久,组件卸载不丢状态 │

│ - 特征:轻量、自然、响应式、高性能 │

│ - 用途:共享 UI 状态、缓存、表格筛选等 │

└────────────────────────────────────────────┘

│

▼

┌────────────────────────────────────────────┐

│ 🧩 组件局部状态层(React 原生) │

│────────────────────────────────────────────│

│ 【useState / useReducer】 │

│ - React 内置 hooks │

│ - 生命周期:组件内存活,组件卸载即销毁 │

│ - 特征:轻量、简洁、局部性强 │

│ - 用途:按钮状态、输入框值、弹窗开关等 │

└────────────────────────────────────────────┘

▲

│

│

┌────────────────────────────────────────────┐

│ 🏗️ 传统集中式状态层(Redux / Dva) │

│────────────────────────────────────────────│

│ 【redux / dva】 │

│ - 需要 dispatch + reducer 机制 │

│ - 状态集中存储,全局单一 Store │

│ - 生命周期:全局,手动管理更新逻辑 │

│ - 特征:结构化、可追踪、适合复杂业务流 │

│ - 用途:大型项目、复杂异步逻辑、数据流管理 │

└────────────────────────────────────────────┘

📘 四者详细对比表

对比项 initialState valtio useState redux/dva
来源 Umi 框架内置 第三方库(Proxy,@umijs/max 内置了 valtio) React 内置 独立状态管理库
状态范围 全局(初始化数据) 全局或模块级 组件内 全局集中式
生命周期 应用启动→持久 页面/全局→持久 组件级→销毁 应用级→持久
更新方式 setInitialState() 直接修改属性 setState() dispatch(action)
响应式 ✅ 是 ✅ 是 ✅ 是 ❌ 否(需 connect 或 hook)
模板代码量 少 少 极少 多
适合复杂逻辑 ❌ 否 ⚪ 一般 ❌ 否 ✅ 是
调试与追踪 一般 一般 无需 强(Redux DevTools)
学习成本 低 低 极低 高
推荐场景 初始化用户态、权限、全局配置 页面间共享状态、业务状态 局部组件 UI 状态 大型项目、复杂异步流转

💡 实战组合推荐

场景 推荐方案
登录后保存用户信息 initialState
全局主题/布局状态 valtio
页面内筛选条件/表格缓存 valtio
Modal/输入框状态 useState
多模块异步数据、复杂流转 redux/dva

🧠 记忆口诀

大全局用 initialState,中全局用 valtio,小局部用 useState,超复杂才上 redux。

相关推荐
总要学点什么5 小时前
第89篇:三维特效-螺旋圆效果——让螺旋臂卷起一圈圈外扩的涟漪
开发语言·javascript·ecmascript·webgl·cesium·空间分析·1024程序员节
喵了几个咪7 小时前
AI 时代的危与机:当潮水退去,技术人如何自处
1024程序员节
LMT流氓兔9 小时前
第五单元——第十六课:给书店助手加上网页界面
java·开发语言·jvm·人工智能·oracle·langchain·1024程序员节
开开心心就好11 小时前
音频降噪剪辑工具,音量裁剪一键处理
运维·服务器·前端·spring·ocr·音视频·1024程序员节
开开心心就好13 小时前
竖式除法出题工具,整除余数混合模式
运维·服务器·前端·javascript·ocr·perl·1024程序员节
郝学胜-神的一滴18 小时前
AI 编程智能体 20:技术栈选型与架构落地全攻略
人工智能·python·架构·langchain·1024程序员节·智能体
Highcharts.js19 小时前
Highcharts 集成到 React 或 Vue 项目中时,如何高效地使用 TypeScript技巧?
vue.js·人工智能·react.js·typescript·前端框架·highcharts
xsd202411181 天前
RelateAnything:53M小模型如何把视觉关系检测从50个谓词里解放出来
人工智能·1024程序员节
Brilliantwxx1 天前
【STM32】 内部 Flash 详解:寄存器逐位拆解 + 工作流程顺序全讲 + EEPROM再实现
stm32·单片机·嵌入式硬件·1024程序员节