繁体   English   中英

flutter中的setState和GetX有什么区别?

[英]What is the difference between setState and GetX in flutter?

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

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

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

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

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

Getx state 管理小部件,如GetBuilder()Getx() SetState(() {}) StatfulWidget Obx() ...不同于通常的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)? 
  /*...*/

在引擎盖下,它通过获取如下方法更新 state:

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

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


你的句子:

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

是错的!

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

你面对整个页面 state 更新,因为你用 StatfulWidget 包装了整个页面,与StatfulWidget GetBuilder()Obx() ...

有一个Flutter构建器小部件,您还可以在本地管理其子级的 state,即StatefulBuilder ,请快速检查一下,我建议您使用它来了解使用构建器小部件更新 state 的方法。

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

 update([id1, id2, id3]);

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM