React 状态管理怎么选提示词(服务端状态与客户端状态分开,Context、轻量 store、请求库各管什么)

React 项目里状态越堆越乱、不知道该放 useState、Context 还是全局 store 时用。贴出页面与状态清单,AI 先把每个状态按来源归类,再给出各自该用的方案、对比理由和分步迁移顺序,避免把接口数据和界面状态搅在一起。

NNathaniel bigo··原创首发·AI 辅助撰写
通用大模型 对话模型通用
请你以资深 React 前端工程师的身份,帮我给项目里的状态「分家」并选方案。

项目情况:
- React 与框架版本:[React 与框架版本]
- 页面与状态清单(每个页面有哪些数据、谁读谁改):
  [页面与状态清单]
- 现在的做法:[现用状态方案]
- 最头疼的问题:[当前痛点]

第一步,归类。把清单里的每个状态归入下面四类之一,拿不准的直接问我:
A. 服务端状态:来自接口,别人也可能改,有缓存、过期、重新获取的问题;
B. 地址栏状态:筛选条件、页码、当前标签页,刷新或分享链接后应当还在;
C. 客户端界面状态:弹窗开关、表单草稿、主题、当前登录用户;
D. 派生数据:能由其他状态算出来的,不应该单独存。

第二步,按类选方案并说明理由:
- A 类优先交给数据请求库(如 TanStack Query、SWR)管理缓存、去重、失效和重试,不要复制进全局 store 再手动同步;
- B 类放路由参数;
- C 类先看共享范围:单组件用 useState 或 useReducer;父子几层用状态提升;全应用低频变化的(主题、语言、登录用户)用 Context,并说明 Context 的值一变,所有消费它的组件都会重渲染,不适合高频更新;跨得很远又更新频繁的才用轻量 store(如 Zustand、Jotai、Redux Toolkit),并按需订阅;
- D 类在渲染时直接计算,确有性能问题再做缓存。

第三步,输出:
1. 一张表:页面 | 状态 | 类别 | 建议方案 | 理由;
2. 两套整体方案的对比(依赖最少的一套、扩展性更好的一套),给出推荐;
3. 迁移步骤:按风险从低到高排,每步可单独上线和回滚,写明验证方法。

库的具体 API 以我所用版本的官方文档为准,你拿不准的写法标「需核对」,不要凭印象写。

高亮处换成你自己的内容:[React 与框架版本]、[页面与状态清单]、[现用状态方案]、[当前痛点]

ChatGPT Plus 充值

已被复制 0 次

使用说明

怎么填变量:[页面与状态清单] 不用贴代码,按「订单列表页:订单数据(接口)、筛选条件、勾选的行、批量操作弹窗」这样一行一个页面列出来就行。[现用状态方案] 写实际情况,例如「全部放 Redux,接口数据也存在里面」。[当前痛点] 越具体越好,如「改一个筛选条件整页重渲染」「返回列表页时数据是旧的」。

常见问题与调整:

  • 方案一上来就要引入三四个库 → 追问:「在不新增依赖的前提下,只用 React 自带能力重新给一版,并说明哪些地方会吃力。」
  • 不确定 Context 会不会拖慢页面 → 追问:「按我的清单,指出哪些状态放进 Context 会引起大范围重渲染,该怎么拆分或换方案。」
  • 迁移步骤太粗 → 追问:「只展开第 1 步,列出要改的文件类型、改动前后的代码对照和回滚办法。」

示例输出

示例,仅供参考(后台管理项目,原先所有数据都放在全局 store)
页面状态类别建议方案
订单列表订单数据A 服务端状态数据请求库,按页码和筛选条件缓存
订单列表筛选条件、页码B 地址栏状态路由查询参数
订单列表勾选的行C 界面状态页面内 useState
订单列表已选订单总金额D 派生数据渲染时由勾选的行计算,不单独存

迁移第 1 步:只把订单数据从全局 store 挪到请求库,其他状态先不动,验证列表翻页和筛选结果与原来一致。

tsx
const { data, isLoading } = useQuery({
  queryKey: ['orders', page, filters],   // 页码或筛选变化时自动重新请求
  queryFn: () => fetchOrders({ page, filters }),
})

同款作品

用这条提示词做出来的作品;原作者会因此获得积分

做同款

还没有同款,来做第一个。

Nathaniel 的更多内容

同主题

同模型

0 条评论

登录 后参与评论

还没有评论,来抢沙发~