什么时候更愿意通过州级考试而不是考试本身 [英] When to prefer passing State<T> vs T itself

查看:11
本文介绍了什么时候更愿意通过州级考试而不是考试本身的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有没有哪种情况下应该优先选择其中一种选择?

@Composable
fun <T> Foo(data: State<T>) { ... }

比较

@Composable
fun <T> Foo(data: T) { ... }

或具有可变状态,

@Composable
fun <T> Foo(data: MutableState<T>) { ... }

比较

@Composable
fun <T> Foo(data: T, setData: (T) -> Unit) { ... }
显然,拥有setData lambda的一个好处是您可以截取set操作,但从编写的角度来看,我更感兴趣。是否对合成编译器或重组的工作方式有任何影响?

推荐答案

我更喜欢

@Composable
fun <T> Foo(data: T) { ... }

@Composable
fun <T> Foo(data: T, setData: (T) -> Unit) { ... }

在它们各自的对应部分上。原因如下:

  • 对于第一个,如果将来必须更改State数据结构,您必须重构Composable的所有Composable 实际上没有原因,因为State<T>不会带来任何额外的 Composable的可访问性。此外,在样本项目中 和Google的现场演示,我总是看到他们使用T
  • 对于第二个,假设您使用的是两个或多个组合,例如ComposableAComposableB,如果对MutableState进行任何更新,这两个组合都可以改变彼此的状态,这在某些情况下可能会产生问题。如果ComposableP是它们最不常见的父级,我更喜欢在父级中声明MutableState,并将T和回调传递给ComposableAComposableB。您可以比较State Hoisting

这篇关于什么时候更愿意通过州级考试而不是考试本身的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆