【问题标题】:What scenarios is it reasonable to use a function to define a widget composition over a Statelss class? [duplicate]在 Statelss 类上使用函数定义小部件组合的场景是合理的? [复制]
【发布时间】:2019-01-12 08:08:46
【问题描述】:

这个讨论在github

https://github.com/flutter/flutter/issues/19269

讨论了应该在函数组件上使用无状态类定义来定义小部件组合的原因。

Widget functionWidgetComposition() => Text('hello');

class MyWidgetComposition extends StatelessWidget {
  Widget build(BuildContext context) => Text('hello');
}

如果我理解正确的话,使用Stateless的原因如下……

  1. 我需要访问上下文吗?
  2. 我是否关心它不会通过热重载来重建? (或者我会记得)
  3. 我需要将我的小部件与键关联吗?
  4. 这个小部件会不会是一个常量?
  5. 这个小部件是否需要重建?

总是使用无状态作为一个相当标准的规则感觉很有吸引力,但函数式风格要简洁得多,尤其是当你有几个参数时。我觉得功能组件会提高我的代码的可读性。那么我应该始终使用无状态类,还是在某些情况下使用 React 调用的功能组件可以?

【问题讨论】:

  • 我认为这对 StackOverflow 来说不是一个好问题,因为它主要基于意见。我阅读了 GitHub 上的帖子,发现 Flutter 团队成员已经很好地回答了这个问题。
  • 冒昧地在 github 讨论中为类添加了一些要点

标签: flutter


【解决方案1】:

来自https://github.com/flutter/flutter/issues/19269#issuecomment-404667287

是的,主要区别在于它如何链接到元素树(在 该函数不会获得对元素本身的引用,也不会 被触发通过元素树重建自己)。

其他一些例子:

  • 如果您的子树依赖于 InheritedWidget,StatelessWidget 将 获得手术标记以重建自身。如果你使用了一个函数, 为函数提供 BuildContext 的小部件将被重建。
    • 在热重载期间不会调用函数本身来重建。某人 否则必须随身携带。如果您只是将一个函数传递给 runApp 在您的应用程序的根目录,在此期间不会重建任何内容 热重载。

完整讨论见https://github.com/flutter/flutter/issues/19269

【讨论】:

    猜你喜欢
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多