【发布时间】:2021-11-01 16:47:00
【问题描述】:
我们可以从官方文档中阅读:
当在状态上调用 setState() 时,所有后代小部件都会重建。 因此,将 setState() 调用本地化到子树的一部分 其 UI 实际上需要更改。避免在高处调用 setState() 如果更改包含在树的一小部分,则树。
那么“本地化 setState()”到底是什么意思?我该怎么做?
【问题讨论】:
标签: flutter
我们可以从官方文档中阅读:
当在状态上调用 setState() 时,所有后代小部件都会重建。 因此,将 setState() 调用本地化到子树的一部分 其 UI 实际上需要更改。避免在高处调用 setState() 如果更改包含在树的一小部分,则树。
那么“本地化 setState()”到底是什么意思?我该怎么做?
【问题讨论】:
标签: flutter
这意味着最好在唯一需要更新的小部件上调用 setState()。 我们来看一个例子:
Column(
children:[
FooWidget() //which you wanna update(rebuild)
AnotherWidget() //wich you don't want to rebuild
],
)
如果你用一个有状态的小部件包裹整个专栏,那么任何时候你使用 setState(),FooWidget() 和 AnotherWidget() 都将重建,当然这不是你想要的 Flutter!
不需要更新是浪费硬件使用。
因此,本地化 setState() 意味着您将 FooWidget() 设为有状态并在 'FooWidget()' 上调用 setState() 而不是整个列。
【讨论】:
FooWidget() 中使用,则不应在根目录中定义它。否则,您应该在该小部件中定义一个回调并通过该回调更新该变量的值。并在FooWidget() 的回调中使用 setState
FooWidget() 中还是在父级中?