mcpField
R
riverpod-select

riverpod-select

github.com/serverpod开发1078 次安装34 周前更新
代码仓库

关于 riverpod-select

这项 Riverpod 技能介绍如何使用 select 只监听 Provider 状态的一部分,避免无关值变化时触发重建。内容也涵盖异步 Provider 已解析数据的 selectAsync,以及何时值得采用这项优化。

主要功能

  1. 01监听选定的 Provider 值
  2. 02仅在选定值变化时重建
  3. 03对异步数据使用 selectAsync
  4. 04保持选定值不可变

适用场景

  1. 01仅在显示字段变化时重建 Widget
  2. 02无关状态频繁变化时减少重建

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/serverpod/skills-registry --skill riverpod-select

安装后在 Claude Code 中输入/riverpod-select确认已加载。

详细介绍

Riverpod — 使用 select 减少重建

说明

默认情况下,ref.watch(provider) 会在 provider 的值发生变化(按引用/相等性判断)时重建。如果你只使用状态的一个子集(例如 User 的一个字段),其他字段发生变化时,组件仍会重建。

使用 select 只监听状态的一部分。只有 选定的 值发生变化(按 == 判断)时,才会重建。

语法
// Rebuild only when firstName changes
String name = ref.watch(provider.select((it) => it.firstName));
return Text('Hello $name');

你可以多次调用 select 来选择不同的属性。选定的值应为不可变;在原地修改返回的 List/对象不会触发重建。

异步 provider:selectAsync

对于异步 provider,你通常会使用 ref.watch(provider.future)。若要选择已解析的数据,而不是整个 AsyncValue,请使用 selectAsync(如果可用):它会对数据应用 select 并返回一个 Future。具体 API 请参阅与你所用版本对应的 Riverpod 文档。

适用场景
  • 仅当“其他”属性经常变化,且你已确认重建是性能瓶颈时才使用。select 会带来少量开销和额外复杂性。除非需要优化,否则优先使用普通的 watch。

评论

支持 Markdown