Dom*_*ayr 6 state viewmodel android-jetpack-compose dagger-hilt
例子:
我有一个@Composable func WorkoutScreen(...)注入专用 ViewModel (例如带刀柄)。它显示了一些不同的子可组合项,例如@Composable func ProgressView(...)其他一些。ProgressView是整个屏幕中唯一的可组合项State,它观察/需要来自注入的 ViewModel 的特定属性 x。将 ViewModel 从 WorkoutScreen 作为参数传递给 ProgressView 是不好的做法吗?或者我应该只传递 States 值?
让我们进一步思考一下,假设我只通过了州政府。另外,我们还可以说,需要 State 的不是 ProgressView,而是 ProgressView 的另一个子级。如果状态现在发生变化,如果我理解正确的话,整个 ProgressView 可能会重新组合,因为“其输入发生了变化”(而不仅仅是子级)。这不会导致不必要的重新补偿吗?
整个 Composable 不应该重构,因为 Compose 足够高效,可以仅重构显式读取状态的 Composable。
不用担心效率,不会受到影响。对于原则部分,不,您不应该传递模型。这是因为关注点分离原则。程序的所有部分都应该只能访问它们运行所需的信息——不多也不少。
如果传递整个视图模型,首先应用程序的每个部分都可以访问视图模型内的所有内容,并且可能会修改导致冲突的属性。它还使视图模型与大量可组合代码紧密耦合,而仅传递状态,将耦合限制为仅可组合实际需要的视图模型部分。最后,如果您传递视图模型,那么几乎不可能测试您的应用程序,因为您需要生成一个全新的“假”视图模型,其中 testi 的值是假的,随着模型的增长,这将成为问题和复杂的。
使用状态提升。阅读此处: https: //developer.android.com/codelabs/jetpack-compose-state#8,或另一个堆栈溢出答案
小智 4
将 ViewModel 传递给子可组合项并不是很好的做法。只有屏幕级可组合项(主 UI 页面)才应访问 ViewModel 业务逻辑。这种方法有两个主要好处:
您孩子的可组合项将变得可重复使用。
没有具体的实现,所以你可以轻松更新
商业逻辑。
| 归档时间: |
|
| 查看次数: |
2742 次 |
| 最近记录: |