gpt4 book ai didi

android - Jetpack Compose 中的副作用

转载 作者:行者123 更新时间:2023-12-05 09:30:53 25 4
gpt4 key购买 nike

我了解到,除了 composable 中的 composition 行为外,所有其他行为都是副作用。那么,对于 TextField,在 onValueChange 中更改 TextFieldValue 是否有副作用?此外,在 composable 中显示 toast 消息是否有副作用?

最佳答案

让我们首先了解一些函数式编程方面的术语

幂等 - 意味着调用相同的函数 n 次,提供相同的输入,应该产生相同的输出。

您的函数在组合世界中需要幂等,以便重组工作 - 作为组合运行时,memoizes 在初始组合期间,如果在重组期间输入函数没有改变(或者说树节点没有更新),compose 运行时将使用相同的 memoized 结果。函数不是 idempotent 会导致重组期间出现意外行为。

Purefunction - 不包含副作用的函数。

Side-effect - 它是任何超出函数范围的操作,可以在旁边做一些意想不到的事情。

In compose world - side-effect could be a change to the state of the app that happens outside of the scope of the function, things like setting a global variable, updating cache, making a network query, reading from file etc.. 

It makes the function non-deterministic and can lead to race condition and unexpected behavior.

To generalize, side-effects are unexpected actions happening on the side, out of what callers would expect from the function, and that alter its behavior.

正如我们所说,函数应该没有副作用,但是在少数情况下,我们需要从可组合中运行副作用,为了处理这些情况,compose 运行时提供了不同的 effect-handlers , - 这将确保它们根据 compose 生命周期在正确的时间运行。

So, in the case of TextField, is changing the TextFieldValue inonValueChange a side effect?

它看起来更像是 unidirectional数据流向我,并且由于状态是在可组合项(可组合项的内部内存)范围内管理的,所以这不是副作用。

Also, is it a side effect to display a toast message in composable?

这可能是一个副作用,如果效果处理不当,考虑到,你最终不会在重新组合时调用 toast。

关于android - Jetpack Compose 中的副作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69233520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com