zustand-mmkv-storage:React Native 中 Zustand 的极速持久化
Source: Dev.to
为什么在 React Native 中需要持久化状态?
移动用户期望应用“记住”他们:
- 登录令牌应保持有效
- 应用关闭时购物车不应被清空
- 主题偏好(暗色/亮色)应持久化
- 引导流程不应每次都重新播放
如果没有持久化,应用会显得破碎;而良好的持久化则让它感觉原生且精致。
老王者:AsyncStorage
多年来,AsyncStorage 是默认方案。它简单、兼容所有平台,并能很好地与 Zustand、Redux 等库集成。
但它有严重的缺点:
- 慢:完全基于 JavaScript,桥接调用序列化
- 仅异步:如果不小心,每次读写都会阻塞 UI
- 默认无加密
- 已被 React Native 核心团队弃用(由社区分支取代)
基准测试显示,在真实场景中,MMKV 的速度是 AsyncStorage 的 30–100 倍。
迎接 MMKV:现代冠军
MMKV(Mobile Key‑Value)是由腾讯开发、现由 Marc Rousavy 维护的高性能键值存储。
主要优势:
- 使用 C++ 编写,配合 JSI 绑定 → 极快
- 同步 读写(
get不需要await) - 内置 加密 支持
- 多进程模式(适用于应用组/扩展)
- 占用体积小,兼容 Expo
- 积极维护,已在大型应用中投入生产使用
简而言之:MMKV 就是 2025 年 AsyncStorage 本该有的样子。
Zustand + 持久化 = 魔法
Zustand 是当今 React Native 中最流行的轻量级状态管理器。其 persist 中间件让状态保存变得极其简单——前提是你有一个好的存储后端。
大多数人卡在这里:手动接入 MMKV 代码冗长、易出错,且无法干净地处理实例共享或加密。
介绍 zustand-mmkv-storage
我构建了 zustand-mmkv-storage 来专门解决这个问题。
这是一个小型包装器,能够让你以最少的样板代码把 MMKV 接入 Zustand 的 persist 中间件:
import { create } from 'zustand';
import { persist, createJSONStorage } from 'zustand/middleware';
import { mmkvStorage } from 'zustand-mmkv-storage';
export const useBearStore = create(
persist(
(set) => ({
bears: 0,
addBear: () => set((state) => ({ bears: state.bears + 1 })),
}),
{
name: 'bear-storage', // key in MMKV
storage: createJSONStorage(() => mmkvStorage),
}
)
);
你的 bears 计数现在可以在应用重启后持久化——快速且可靠。
高级:加密与隔离存储
import { createMMKVStorage } from 'zustand-mmkv-storage';
const secureStorage = createMMKVStorage({
id: 'secure-vault', // separate file
encryptionKey: 'my-secret-2025', // enables encryption
});
export const useAuthStore = create(
persist(
(set) => ({
token: '',
setToken: (token) => set({ token }),
}),
{
name: 'auth-storage',
storage: createJSONStorage(() => secureStorage),
}
)
);
现在你的认证令牌在磁盘上已加密,并且与其他数据完全隔离。
使用场景
- 认证令牌和刷新令牌
- 用户偏好(主题、语言)
- 购物车 / 离线表单
- 引导完成状态
- 功能标记 / A‑B 测试
立即尝试!
npm i zustand-mmkv-storage
如果这为你节省时间或让你的应用更快,请在 GitHub 上给我一个 ⭐!
感谢阅读——祝你持久化愉快(且快速)!🐻✨