【问题标题】:Flutter: What happens if "setState" is called after changing the state? [duplicate]Flutter:如果改变状态后调用“setState”会发生什么? [复制]
【发布时间】:2021-04-19 00:59:26
【问题描述】:

在以下示例中:

setState(() {
    _counter++;
  });

如果我在调用setState() 之前增加计数器会怎样?喜欢:

_counter++;
setState(() {});

我真的不明白其中的区别,两个版本都可以。

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    功能基本相同。唯一的区别是可读性,在setState 回调中调用_counter 可以清楚地说明您打算重建小部件的原因。

    【讨论】:

      【解决方案2】:

      setState里面和上面放置counter++没有区别。每当调用setState 时,它都会告诉整个小部件进行重建。但是,Flutter 团队建议在 setState 内部而不是在外部更改值,以使其更具可读性,并防止在调用 setState 后意外设置值。这是一个有多个计数器的:

      Bad:(告诉小部件重建,但没有任何改变)

      setState(() {});
      _counter1++;
      _counter2++;
      _counter3++;
      

      不推荐:(当你有其他代码除了改变值时,你必须阅读整个代码来找出哪些变量会改变)

      _counter1++;
      _counter2++;
      _counter3++;
       setState(() {});
      

      良好且易读(即使您有其他代码,例如保存在 SharedPreferences 中,也很容易知道哪些变量会发生变化):

      setState(() {
        _counter1++;
        _counter2++;
        _counter3++;
      });
      

      【讨论】:

      • 虽然你可以使用 setState 来更新屏幕,但你以后必须做状态管理。 setState 效率低下,因为即使您只有一个更改的小部件,您也必须重建整个屏幕。 Provider 和 Get_it 还允许您在多个屏幕之间共享模型,而无需传递它们。 flutter.dev/docs/development/data-and-backend/state-mgmt/…
      猜你喜欢
      • 2018-08-17
      • 2015-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多