状态管理变迁史:为什么我们放弃了 Redux 选择 Zustand?

1. 状态管理在 Android 与 React Native 中的对应

在 Android 开发中,状态管理经历了从传统的 MVP (Presenter 保存状态) 到 MVVM (ViewModel + LiveData / StateFlow),再到如今配合 Compose 使用的单向数据流 (MVI)。

在 React Native 中,状态管理同样经历了一场演进。对于从 Compose 过来的开发者,最好将 RN 的状态管理类比为 Compose 中的 State 或者 ViewModel 里的 StateFlow。

2. 传统霸主:Redux

Redux 是 React 生态中最老牌、最正统的状态管理库。

Redux 的核心概念

  • Store: 全局唯一的数据源 (类似全局单例的 ViewModel 存放所有 State)。
  • Action: 描述发生了什么 (类似 MVI 中的 Intent/Event)。
  • Reducer : 接收旧状态和 Action,返回新状态 (类似 MVI 中的 Reducer,通常是一个庞大的 when 或 switch 语句)。

为什么我们觉得 Redux 太重了?

  • 样板代码极多 :为了改一个简单的布尔值,你需要写 Action Type、Action Creator、Reducer,然后绑定到组件上。这比写一个 MutableStateFlow 繁琐十倍。
  • 心智负担重:对于 Android 开发者来说,仅仅为了跨页面共享一个状态就要引入这么一套庞大的"单向数据流"哲学,显然是杀鸡用牛刀。

3. 轻量级新星:Zustand

Zustand(德语"状态")是目前 React 生态中最受欢迎的轻量级状态管理库之一。

Zustand 为什么更适合现代 RN 开发?

  1. 极简 API:不需要 Provider,不需要 Reducer,直接创建一个 hook 就可以用。
  2. 非常像 Kotlin 的单例 + StateFlow:在 Zustand 中,状态和修改状态的方法写在一起,非常直观。

示例对比

Android (Kotlin + StateFlow) :

kotlin 复制代码
object UserStore {
    private val _user = MutableStateFlow<User?>(null)
    val user = _user.asStateFlow()
​
    fun login(newUser: User) {
        _user.value = newUser
    }
}
// 在 Compose 中使用
val user by UserStore.user.collectAsState()

React Native (Zustand) :

javascript 复制代码
import { create } from 'zustand'
​
const useUserStore = create((set) => ({
  user: null,
  login: (newUser) => set({ user: newUser }),
}))
​
// 在组件中使用
const user = useUserStore((state) => state.user)
const login = useUserStore((state) => state.login)

可以看出,Zustand 的写法几乎和 Kotlin 中定义一个带状态的单例一样简单,但它能自动触发 React 组件的重新渲染,而不需要手动 collectAsState。

4. 总结

对于 Android 开发者转型 RN,强烈建议直接跳过 Redux,使用 Zustand。它的心智模型更接近于我们在 Android 中习惯的基于 ViewModel 和 StateFlow 的状态共享,能够极大地提升开发效率。

相关推荐
聚美智数5 小时前
智能结构化识别-图片结构解析-图像结构化解析-照片结构化解析
android·java·数据库
lpfasd1236 小时前
node-sass 停止维护!老项目迁移 Dart Sass 完整教程
前端·rust·sass
Data analyse4568 小时前
rnweb 回放数据量太大怎么办?分片存储与断点续传的实现思路
前端·网络·算法·数据分析
xiaogai_gai8 小时前
金蝶收料通知单查询策略实战教程:从源系统拉取到中间层落地的完整路径
java·前端·数据库
环境栈笔记9 小时前
指纹浏览器 WebRTC 怎么设置?从 ICE 候选、代理出口到功能验证
前端·人工智能·后端·自动化
赵大仁9 小时前
官网性能优化实战:LCP 3.2s → 2.1s、CLS 0.107 → 0,以及被我推翻的 6 个判断
前端·性能优化·cls·lcp·core web vitals
xiancai_xianyu10 小时前
Text2SQL落地生产库前,SQL要过哪三道闸
前端·数据库·sql·sql注入·text2sql·ai agent开发·企业级ai框架
小羊没烦恼!10 小时前
T-SQL查询进阶--理解SQL SERVER中的分区表
服务器·开发语言·前端·javascript·html
史瓦辛格10 小时前
给 DeepSeek Harness 写费用插件:把「这次会话花了多少钱」算准
前端·deepseek
星光不问赶路人10 小时前
Vue 3 + TypeScript 中 enum 的使用实践
前端·vue.js