【问题标题】:What is the difference between setState and GetX in flutter?flutter中的setState和GetX有什么区别?
【发布时间】:2022-11-27 14:13:20
【问题描述】:

我只是期待了解使用普通 setState(() {})Getx 包的 update() 方法之间的区别。

从实际的角度来看,当使用 setState(() {]) 时,整个页面都会重建,但当 GetX 使用时,仅重建 .obs 的一部分。我想了解的是更深入的区别。

【问题讨论】:

标签: flutter dart flutter-dependencies flutter-getx


【解决方案1】:

setState 将刷新整个小部件。但是使用 Getx 可以刷新特定的小部件。

您可以从此链接找到更多信息:Getx Controller

【讨论】:

    【解决方案2】:

    Getx 的状态管理器是一种工具,可让您从单独的位置控制和管理小部件状态,即 GetxController

    Getx 状态管理小部件,如GetBuilder()Getx()Obx()... 是StatfulWidgets 并且在引擎盖下,它们也使用普通的SetState(() {}),但调用它们的实现确实是与通常的setState(() {}) 电话不同。

    例如,GetBuilder()

    class GetBuilder<T extends GetxController> extends StatefulWidget {
      final GetControllerBuilder<T> builder;
      final bool global;
      final Object? id;
      final String? tag;
      final bool autoRemove;
      final bool assignId;
      final Object Function(T value)? 
      /*...*/
    

    在幕后,它通过获取这样的方法来更新状态:

      void getUpdate() {
        if (mounted) setState(() {});
      }
    

    然后将其存储在Map中,我们使用update()从控制器中调用它。


    你的句子:

    从实际的角度来看,当使用 setState 时,整个页面都会重建,但是当 GetX 使用时,仅重建 .obs 的一部分

    是错的!

    尝试用 GetBuilder 包装整个页面并从其控制器调用 update(),您将对整个页面进行完全重建,因为它只是一个普通的 StatefulWidget,将通过调用其 build() 方法重建一次又一次...

    你面临整个页面状态更新,因为你用 StatfulWidget 包裹了整个页面,同样的事情还有 GetBuilder()Obx()...

    有一个 Flutter builder widget 可以让你在本地管理它的孩子的状态,它是 StatefulBuilder,快速检查一下,我建议你使用它来理解使用 builder widget 的方法更新状态。

    除了 Getx 使您能够将逻辑和状态管理分离到 GetxController 中,它还允许您使用自己的自定义机制控制要更新的小部件,例如使用 update() 方法(它调用普通的 SetState( () {}) ) 与特定的id,像这样:

    update([id1, id2, id3]);
    

    在引擎盖下搜索 Map,它存储从 GetxGetBuilder() 获得的所有 SetState(() {}),然后查找与 id 匹配的内容,然后只调用属于它的内容,然后这是导致具有其中一个 id 的小部件将被更新,而其他小部件不会更新的原因。

    你可以通过快速阅读它的源代码来了解更多关于Getx是如何工作的,我想这对你会有很大帮助。

    【讨论】:

      猜你喜欢
      • 2022-10-15
      • 2022-08-02
      • 2023-01-26
      • 1970-01-01
      • 2019-04-27
      • 2021-09-06
      • 2020-09-20
      • 2020-05-06
      • 2020-04-02
      相关资源
      最近更新 更多