![]() |
1
3
正如您所发现的,您不应该请求任何数据作为合成的一部分——正如所解释的那样 in the documentation ,成分应无副作用。除了这个无限的重新组合问题,许多操作,如动画,都可能导致 frequent recompositions 。
要解决此问题,您需要移动称为
有三种方法可以做到这一点:
不是最好的:1。使用类似的效果
这将调用移出组合,但仍需要在可组合代码中进行手动调用。这也意味着,每次你回到这个屏幕(例如,屏幕“进入合成”),它都会被再次调用,而不是使用你已经加载的数据。 更好:2。创建ViewModel时加载数据一次
通过呼叫
然而,这使得测试ViewModel变得相当困难,因为您无法准确控制加载何时开始。 最佳:3。使ViewModel从冷流中获取数据
而不是单独
我们仍然可以像上面看到的那样堆肥:
但现在它是第一个呼叫
这也为将来使系统更智能开辟了更多的灵活性-如果您稍后添加
data layer
以及一个控制改装数据和本地数据(例如,存储在数据库中的数据)的存储库,您可以轻松地替换
这个
|
![]() |
2
0
是一种反模式,不应该这样做。您不应该直接从可组合文件内部发出网络请求。这将是一个
|
![]() |
A. Cedano · 如何在UIState中包含错误案例? 5 月前 |
![]() |
Murilo · Jetpack编写导航栏项目图标 5 月前 |
![]() |
zplot · 使用具有抽象嵌套类的泛型时类型不匹配 6 月前 |