|
|
1
3
正如您所发现的,您不应该请求任何数据作为合成的一部分——正如所解释的那样 in the documentation ,成分应无副作用。除了这个无限的重新组合问题,许多操作,如动画,都可能导致 frequent recompositions 。
要解决此问题,您需要移动称为
有三种方法可以做到这一点:
不是最好的:1。使用类似的效果
这将调用移出组合,但仍需要在可组合代码中进行手动调用。这也意味着,每次你回到这个屏幕(例如,屏幕“进入合成”),它都会被再次调用,而不是使用你已经加载的数据。 更好:2。创建ViewModel时加载数据一次
通过呼叫
然而,这使得测试ViewModel变得相当困难,因为您无法准确控制加载何时开始。 最佳:3。使ViewModel从冷流中获取数据
而不是单独
我们仍然可以像上面看到的那样堆肥:
但现在它是第一个呼叫
这也为将来使系统更智能开辟了更多的灵活性-如果您稍后添加
data layer
以及一个控制改装数据和本地数据(例如,存储在数据库中的数据)的存储库,您可以轻松地替换
这个
|
|
|
2
0
是一种反模式,不应该这样做。您不应该直接从可组合文件内部发出网络请求。这将是一个
|
|
Murilo · Jetpack编写导航栏项目图标 1 年前 |
|
|
KolaYAndr · 活动RESULT_OK似乎从未发生过 1 年前 |
|
psycho_pat · Android应用程序中的权限 1 年前 |
|
|
FarazFiroz · 如何将argb转换为描述性文本颜色 1 年前 |
|
Daniel · Unity Android游戏支持的设备数量太少 1 年前 |