赞
踩
Compose 官方:副作用(附带效应)是指发生在可组合函数作用域之外的应用状态的变化。
首先需要明白 Compose 中关于重组(Recompose)的一个关键特点:可组合函数可以按任何顺序执行。
这是一个官方的示例代码,用于在标签页布局中绘制三个页面:
@Composable
fun ButtonRow() {
MyFancyNavigation {
StartScreen()
MiddleScreen()
EndScreen()
}
}
按照传统的应用开发思维,这种代码结构意味着三个页面的绘制是按其出现的顺序依次运行的。但其实不是,如果某个可组合函数包含对其他可组合函数的调用,这些函数可以按任何顺序运行。Compose 可以选择识别出某些界面元素的优先级高于其他界面元素,因而首先绘制这些元素。
这就意味着对 StartScreen
、MiddleScreen
和 EndScreen
的调用可以按任何顺序进行的。
那么看下面的操作场景:
@Composable
fun ButtonRow() {
MyFancyNavigation {
// 1. 这里定义了一个全局变量
StartScreen() // 3. 内部修改了这个全局变量
MiddleScreen() // 2. 内部要使用这个变量
EndScreen()
}
}
前面我们说了,三个可组合函数的调用顺序是不定的,如果按照 1 -> 3 -> 2 的顺序调用,那么功能就会出错,这种行为就是所谓的:发生在可组合函数作用域之外的应用状态的变化,也就是:副作用(附带效应)。
所以 Compose 官方建议:可组合项在理想情况下应该是无副作用的!
不过你也注意到了:是理想情况下不应该有副作用,但有时副作用又是必要的,它很有用!
Compose 中副作用的目的:允许执行与 UI 无关的操作,这些操作以可控且可预测的方式更改可组合函数之外的应用状态。
副作用(如更新数据库或进行网络调用)应与 UI 呈现逻辑分开,以提高代码的性能和可维护性。
Compose 提供了多个可组合函数,例如 SideEffect
、LaunchedEffect
和 DisposableEffect
,这些函数使开发人员能够有效地管理副作用,方法是将它们与界面渲染逻辑分离并在单独的协程范围内执行它们。
在 Compose 中使用副作用的主要好处是:
总之,Compose 中副作用的目的是通过将非 UI 相关操作与 UI 渲染逻辑分离来提高代码库的性能、可维护性和调试。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。