zustand-mmkv-storage:React Native 中 Zustand 的极速持久化

发布: (2025年12月30日 GMT+8 07:06)
4 min read
原文: Dev.to

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

GitHubNPM

如果这为你节省时间或让你的应用更快,请在 GitHub 上给我一个 ⭐!

感谢阅读——祝你持久化愉快(且快速)!🐻✨

Back to Blog

相关文章

阅读更多 »