【问题标题】:Riverpod ref.watch(statenotifierprovider) vs ref.watch(statenotifierprovider.notifier)Riverpod ref.watch(statenotifierprovider) 与 ref.watch(statenotifierprovider.notifier)
【发布时间】:2023-01-25 06:09:12
【问题描述】:

我一直在试图找出观看 StateNotifierPovider 对象与观看它暴露的通知程序之间的区别。正如我们在 section 之后的文档中看到的那样,当状态发生变化时,观察通知对象不会触发对象的构建方法。出于实验,看起来提供者对象暴露了通知程序中的状态,就像ref.read(provider.notifier).state 一样。我无法真正理解直接观察提供者与 provider.notifier 之间的区别,以及为什么它在观察通知程序和更改其状态时不触发构建方法。

【问题讨论】:

    标签: flutter dart riverpod flutter-riverpod


    【解决方案1】:

    .notifier 的文档应该很清楚:

    获取与此提供者关联的 StateNotifier,无需 监听状态变化。

    这通常用于调用 StateNotifier 上的方法。为了 例子:

    Button(
     onTap: () => ref.read(stateNotifierProvider.notifer).increment(),
    )
    

    如果 StateNotifier 实例变化。如果刷新提供程序或一个,则可能会发生这种情况 它的依赖项发生了变化。

    https://pub.dev/documentation/riverpod/latest/riverpod/AutoDisposeStateNotifierProvider/notifier.html

    所以ref.watch(provider) 监听状态变化。

    ref.watch(provider.notifier)只获取notifier,不监听状态变化。相反,它会监听StateNotifier实例何时被重新创建——比如如果你做了ref.refresh(provider),这将重新创建StateNotifier

    【讨论】:

    • 厉害了雷米!几分钟前,我正在研究 api 文档并偶然发现了这个文档。刷新/无效方法也一样(也许这可以添加到 riverpod 文档的 v2 中)。顺便说一下,你是你的忠实粉丝,感谢你为 flutter/dart 社区所做的一切!
    猜你喜欢
    • 2022-08-14
    • 1970-01-01
    • 2021-03-24
    • 2022-10-25
    • 2021-12-28
    • 1970-01-01
    • 2022-06-11
    • 2021-01-28
    • 1970-01-01
    相关资源
    最近更新 更多