跳到正文

状态管理

State Management

中级通用

状态管理(State Management)是组织界面数据如何保存、更新和共享的方式。它解决多个组件显示同一份数据时难以保持一致的问题,比如购物车加了商品,角标和结算页都要跟着变化。

你可能会说:「我改了购物车里的商品后,页面各处的数量和总价能不能一起更新?」

读之前建议先了解

动手看看

Morrow 咖啡
购物车
2
1
商品页
埃塞俄比亚手冲咖啡豆花香与柑橘风味 · 250g / 袋
当前已选 2 袋
结算页
埃塞俄比亚手冲咖啡豆
待结算:2 袋
待结算:1 袋
商品页、角标和结算页读取同一份购物车数据
角标和结算页仍保留各自记录的 1 袋
组件共享同一份数据

拖动数量,模拟在商品页加购或移除;看看顶部角标和右侧结算数量是否一起变化。

三个位置读取同一份购物车数据。数量更新一次,角标和结算页就会显示相同的结果。

要点

  1. 1

    先分清数据归谁使用

    搜索框里还没提交的文字,通常由搜索框自己保存就够了;购物车商品要同时显示在列表、角标和结算页,就需要放在这些界面都能读取的位置。共享范围决定状态放在哪里。

  2. 2

    让更新沿着数据流传递

    用户点击“加入购物车”后,我们更新商品列表,依赖这份数据的数量和总价再随之计算。这样各处读的是同一份结果,而不是分别修改角标、结算页和提示文字。

  3. 3

    区分临时值和持久数据

    弹窗是否打开通常只影响当前界面;订单是否已支付则要以服务端结果为准。发起请求时,界面还可能需要显示加载或失败状态。分清这些来源,刷新页面和请求失败时才不会误导用户。

容易混淆的地方

状态是某一刻的数据,例如“购物车有三件商品”;状态管理讨论这些数据放哪儿、由谁更新、哪些界面跟着变化。它也不等于浏览器存储:把数据存起来能让刷新后继续读取,但不能自动解决多个组件如何同步更新。服务端数据还要考虑何时重新获取,不能只靠前端保存一份。

什么时候用

适合用

  • 做购物网站时,商品列表、顶部购物车角标和结算区都要随加购操作同步变化。
  • 做后台筛选页时,筛选条件会同时影响表格、结果数量和分页,需要统一更新。
  • 做 AI 聊天工具时,发送中、流式回复、失败重试等信息会影响输入区和消息列表。

不适合用

  • 页面只是展示一段固定说明,没有随交互变化的数据,用静态内容就够了。
  • 点击导航后只是去另一个网址,不需要为跳转专门维护一份界面状态,直接用链接。
  • 只想让刷新后的登录身份保持有效,核心是会话与身份认证,不能靠前端状态管理替代。

练一练

你做一个商品页:点击加购后,顶部角标和侧边购物车都要更新;刷新后还要看到服务端保存的购物车。你会怎么安排?

让 AI 帮你做

请为商品页设计状态管理:加购后顶部角标、侧边购物车和总价从同一份数据更新;区分加购请求的加载、成功与失败状态。刷新时从服务端获取购物车,并说明哪些临时状态留在组件内部。

接下来学什么