当前位置:   article > 正文

一文彻底吃透 Compose 中的副作用(附带效应)_compose 副作用

compose 副作用

Compose 官方:副作用(附带效应)是指发生在可组合函数作用域之外的应用状态的变化。


为什么不能有副作用?

首先需要明白 Compose 中关于重组(Recompose)的一个关键特点:可组合函数可以按任何顺序执行

这是一个官方的示例代码,用于在标签页布局中绘制三个页面:

@Composable
fun ButtonRow() {
    MyFancyNavigation {
        StartScreen()
        MiddleScreen()
        EndScreen()
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

按照传统的应用开发思维,这种代码结构意味着三个页面的绘制是按其出现的顺序依次运行的。但其实不是,如果某个可组合函数包含对其他可组合函数的调用,这些函数可以按任何顺序运行。Compose 可以选择识别出某些界面元素的优先级高于其他界面元素,因而首先绘制这些元素。

这就意味着对 StartScreenMiddleScreenEndScreen 的调用可以按任何顺序进行的。

那么看下面的操作场景:

@Composable
fun ButtonRow() {
    MyFancyNavigation {
    	// 1. 这里定义了一个全局变量
        StartScreen()  // 3. 内部修改了这个全局变量
        MiddleScreen() // 2. 内部要使用这个变量
        EndScreen()
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

前面我们说了,三个可组合函数的调用顺序是不定的,如果按照 1 -> 3 -> 2 的顺序调用,那么功能就会出错,这种行为就是所谓的:发生在可组合函数作用域之外的应用状态的变化,也就是:副作用(附带效应)

所以 Compose 官方建议:可组合项在理想情况下应该是无副作用的!

不过你也注意到了:是理想情况下不应该有副作用,但有时副作用又是必要的,它很有用!



为什么要使用副作用?

Compose 中副作用的目的:允许执行与 UI 无关的操作,这些操作以可控且可预测的方式更改可组合函数之外的应用状态。

副作用(如更新数据库或进行网络调用)应与 UI 呈现逻辑分开,以提高代码的性能和可维护性。

Compose 提供了多个可组合函数,例如 SideEffectLaunchedEffectDisposableEffect,这些函数使开发人员能够有效地管理副作用,方法是将它们与界面渲染逻辑分离并在单独的协程范围内执行它们。

在 Compose 中使用副作用的主要好处是:

  1. 改进的性能: 通过在可组合函数之外执行与 UI 无关的操作,UI 呈现逻辑可以保持响应和性能。
  2. 更好的代码组织: 通过将非 UI 相关操作与 UI 呈现逻辑分离,代码库变得更易于理解和维护。
  3. 更好的调试: 副作用可用于日志记录和分析操作(比如埋点),这可以帮助我们更好地了解应用的行为并识别问题。

总之,Compose 中副作用的目的是通过将非 UI 相关操作与 UI 渲染逻辑分离来提高代码库的性能、可维护性和调试。



副作用

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/254198

推荐阅读
相关标签