[英]What is the difference between two setState expressions in Flutter?
[英]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
,它存储从Getx
的GetBuilder()
获得的所有SetState(() {})
,然后查找与该id
匹配的内容,然后仅调用属于它的内容,这就是导致具有这些id
之一的小部件将被更新,而其他小部件则不会。
你可以通过快速阅读它的源代码来了解更多关于Getx
是如何工作的,我想这会对你很有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.