网易首页 > 网易号 > 正文 申请入驻

Zustand在ReactNative中的工程实践与性能优化总结

0
分享至

在 React Native 项目中,状态管理几乎是绕不开的话题。Redux 足够成熟,但样板代码偏重;Context 灵活,却容易失控。本文结合真实 RN 项目经验,系统总结 Zustand 在 React Native 中的工程化使用方式,帮助你在复杂度与开发效率之间找到平衡点。
一、为什么在 React Native 中选择 Zustand

在 RN 工程中,引入状态管理通常会面临几个现实问题:

  • 项目可能是Hybrid 架构,RN 只是一个子模块

  • 原生工程结构复杂,不希望引入侵入式方案

  • 状态类型混杂:UI 状态 + 业务状态 + 缓存状态

  • 对性能和渲染稳定性要求较高

Zustand 的优势,正好命中这些痛点:

1. 无 Provider,天然适合 RN Module

// 不需要 

const count = useCounterStore((s) => s.count);
  • 不依赖 React Context

  • RN 作为子工程接入成本极低

  • 非常适合RN Library / 子业务模块

2. API 极简,降低心智负担

const useStore = create((set) => ({
count: 0,
inc: () => set((s) => ({ count: s.count + 1 })),
}));

没有 reducer、action、slice 的概念,状态即逻辑

3. 天然支持异步,符合 RN 直觉

fetchList: async () => {
set({ loading: true });
const data = await request();
set({ list: data, loading: false });
}

无需 thunk / saga,减少工程复杂度。

二、Zustand 的核心设计理念

在工程实践中,可以将 Zustand 的理念总结为三点:

1️⃣ Store 是“模块状态容器”,不是全局垃圾桶 2️⃣ Selector 是性能优化的核心 3️⃣ 状态拆分优于状态归一化

如果忽略这三点,Zustand 也会被用“烂”。

三、React Native 项目中的推荐目录结构

src/
├── store/
│ ├── auth/
│ │ └── useAuthStore.ts
│ ├── ui/
│ │ └── useUIStore.ts
│ ├── list/
│ │ └── useListStore.ts
│ └── index.ts
├── pages/
├── components/
└── services/
设计原则
  • 按领域拆 store,而不是按技术拆

  • 一个 store 只解决一个问题

  • 不搞rootStore

四、基础 Store 的工程化写法 登录态 Store 示例

type User = {
id: string;
name: string;
};

type AuthState = {
user?: User;
token?: string;
login: (user: User, token: string) => void;
logout: () => void;
};

export const useAuthStore = create ((set) => ({
user: undefined,
token: undefined,
login: (user, token) => set({ user, token }),
logout: () => set({ user: undefined, token: undefined }),
}));
使用方式(关键)

const user = useAuthStore((s) => s.user);
const logout = useAuthStore((s) => s.logout);

永远不要直接解构整个 store

五、性能优化:RN 中必须重视的问题 1. 禁止全量订阅

❌ 错误示例:

const store = useAuthStore();

这会导致任何状态变化都触发组件重渲染

2. Selector + shallow 是标配

import { shallow } from 'zustand/shallow';


const { user, token } = useAuthStore(
(s) => ({ user: s.user, token: s.token }),
shallow
);

适用于:

  • Header

  • TabBar

  • List Item

3. 高频 UI 状态单独 Store

type UIState = {
loading: boolean;
show: () => void;
hide: () => void;
};

避免与业务状态混用,减少渲染链路。

六、异步数据 + 列表场景实践 列表 Store 示例

type ListState = {
list: any[];
page: number;
loading: boolean;
refreshing: boolean;
fetch: (refresh?: boolean) => Promise;
};

export const useListStore = create ((set, get) => ({
list: [],
page: 1,
loading: false,
refreshing: false,

fetch: async (refresh = false) => {
const page = refresh ? 1 : get().page;

set(refresh ? { refreshing: true } : { loading: true });

const data = await fetchListApi(page);

set((state) => ({
list: refresh ? data : [...state.list, ...data],
page: page + 1,
loading: false,
refreshing: false,
}));
},
}));
FlatList 使用

const list = useListStore((s) => s.list);
const fetch = useListStore((s) => s.fetch);
const refreshing = useListStore((s) => s.refreshing);



data={list}
onRefresh={() => fetch(true)}
refreshing={refreshing}
onEndReached={() => fetch(false)}
/>

逻辑集中、UI 干净,非常适合 RN。

七、持久化:Zustand + AsyncStorage

import { persist } from'zustand/middleware';
import AsyncStorage from'@react-native-async-storage/async-storage';


exportconst useAuthStore = create(
persist(
(set) => ({
token: '',
setToken: (t: string) =>set({ token: t }),
clear: () =>set({ token: '' }),
}),
{
name: 'auth-store',
storage: {
getItem: AsyncStorage.getItem,
setItem: AsyncStorage.setItem,
removeItem: AsyncStorage.removeItem,
},
}
)
);
注意点
  • 冷启动恢复是异步的

  • 首屏渲染要考虑 token 未恢复完成的情况

八、Zustand vs Redux Toolkit(RN 实战结论)

维度

Zustand

RTK

代码量

极少

心智负担

RN Module

非常适合

一般

超大型项目

一般

更稳妥


实际建议

  • RN 业务模块 / 子工程:Zustand

  • 跨端统一状态 / 超复杂逻辑:RTK

  • 两者完全可以共存

九、真实项目中的使用边界

Zustand 非万能:

不适合的场景

  • 复杂状态流转(有限状态机)

  • 强约束的数据一致性

  • 超大团队协作的核心状态

非常适合的场景

  • 页面级 / 模块级状态

  • UI 状态管理

  • Hybrid RN 工程

十、总结

Zustand 在 React Native 中的价值不在于“替代 Redux”,而在于:

  • 降低状态管理门槛

  • 提升开发效率

  • 保持工程结构清晰

  • 对 Hybrid 架构极度友好

用对地方,它就是 RN 项目的效率放大器。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
纽约寒天狱中度日 马杜罗冻至发抖纯属咎由自取

纽约寒天狱中度日 马杜罗冻至发抖纯属咎由自取

老马拉车莫少装
2026-01-14 10:54:04
多名归化又如何!赛后,U23国足队长紧握双拳庆祝:对手倒地掩面

多名归化又如何!赛后,U23国足队长紧握双拳庆祝:对手倒地掩面

足球大腕
2026-01-14 22:54:57
毛主席的机要秘书谢静宜有多美?长相可爱,当过北京市委书记

毛主席的机要秘书谢静宜有多美?长相可爱,当过北京市委书记

万物知识圈
2026-01-14 09:05:37
多只权重股尾盘竞价现巨额压单

多只权重股尾盘竞价现巨额压单

每日经济新闻
2026-01-14 18:18:31
回国了我才敢说:委内瑞拉,是我去过的所有国家中,最被低估的!

回国了我才敢说:委内瑞拉,是我去过的所有国家中,最被低估的!

另子维爱读史
2026-01-09 21:09:05
47岁新疆网红主任贺娇龙坠马细节曝光!官方辟谣称还在医院抢救!

47岁新疆网红主任贺娇龙坠马细节曝光!官方辟谣称还在医院抢救!

乌娱子酱
2026-01-14 12:16:21
安徽将调整全省城乡居民社保缴费标准,缴15年最高可领1400元以上

安徽将调整全省城乡居民社保缴费标准,缴15年最高可领1400元以上

虎哥闲聊
2026-01-14 13:48:52
贺娇龙曾称冬天拍摄万马奔腾很紧张,容易打滑!已非首次坠马

贺娇龙曾称冬天拍摄万马奔腾很紧张,容易打滑!已非首次坠马

南方都市报
2026-01-14 14:37:17
一次收2000枚以太币!证监会原司长贪腐细节披露

一次收2000枚以太币!证监会原司长贪腐细节披露

看看新闻Knews
2026-01-15 00:49:17
工程师拒绝调岗至流水线操作工,仍在原岗打卡被辞退,法院判了

工程师拒绝调岗至流水线操作工,仍在原岗打卡被辞退,法院判了

澎湃新闻
2026-01-14 11:42:29
伴郎破坏婚礼后续:正脸被扒已社死,目的曝光,新娘发长文表态

伴郎破坏婚礼后续:正脸被扒已社死,目的曝光,新娘发长文表态

史行途
2026-01-13 13:35:16
又刷四项历史第一!詹皇41岁后场均27+8+8 美媒晒数据证仍巅峰

又刷四项历史第一!詹皇41岁后场均27+8+8 美媒晒数据证仍巅峰

颜小白的篮球梦
2026-01-14 19:29:55
外交部:会采取一切必要措施保护在伊朗中国公民安全

外交部:会采取一切必要措施保护在伊朗中国公民安全

财联社
2026-01-13 15:20:18
泰国在建铁路事故已致22死

泰国在建铁路事故已致22死

环球网资讯
2026-01-14 13:02:35
大瓜实锤!一加创始人刘作虎遭台湾通缉,涉案资金超5亿

大瓜实锤!一加创始人刘作虎遭台湾通缉,涉案资金超5亿

雷科技
2026-01-14 16:45:40
一刀切禁止,是没办法的办法

一刀切禁止,是没办法的办法

大树乡谈
2026-01-13 23:31:29
马卡:因球迷大量退票,FIFA召开紧急会议应对球迷抗议风险

马卡:因球迷大量退票,FIFA召开紧急会议应对球迷抗议风险

懂球帝
2026-01-14 19:18:12
纪实:南京杀妻案吉星鹏被判处死刑,临刑前全身抽搐流泪不止

纪实:南京杀妻案吉星鹏被判处死刑,临刑前全身抽搐流泪不止

谈史论天地
2026-01-14 12:55:03
特朗普举着孩子照片,对哭泣的母亲承诺:我相信中国会执行死刑的

特朗普举着孩子照片,对哭泣的母亲承诺:我相信中国会执行死刑的

博览历史
2025-07-21 17:59:30
朱媛媛去世不到一年,52岁辛柏青高调官宣喜讯,恶心的一幕出现

朱媛媛去世不到一年,52岁辛柏青高调官宣喜讯,恶心的一幕出现

好贤观史记
2026-01-14 18:04:08
2026-01-15 01:19:00
君伟说
君伟说
分享职场故事
360文章数 48关注度
往期回顾 全部

科技要闻

携程因涉嫌垄断被市场监管总局调查

头条要闻

媒体:公开鼓动抗议者 特朗普新表态让全球嗅到火药味

头条要闻

媒体:公开鼓动抗议者 特朗普新表态让全球嗅到火药味

体育要闻

你是个好球员,我们就拿你交易吧

娱乐要闻

网红彭十六偷税被封杀 曾成功转型明星

财经要闻

携程被立案调查,最高或被罚超50亿

汽车要闻

曝Model Y或降到20万以内!

态度原创

游戏
亲子
本地
教育
公开课

重生之我在丧尸末世当检察官

亲子要闻

有好东西要大家一起分享哦

本地新闻

邵阳公益诉讼检察主题曲:《守望星》

教育要闻

保底offer都拿到了,最值得继续加申的英国大学!

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版