如何将值从可组合函数传递到另一个可组合函数并将其修改后返回到 kotlin 中的调用者函数?

问题描述 投票:0回答:1

我最近开始学习Android并开发自己的个人应用程序。更准确地说,我想制作一个预算跟踪器,我刚刚偶然发现的问题是,正如标题中提到的,如何将参数发送到可组合函数并将其修改后返回给调用者。调用者和被调用者都是可组合的。我已经知道,可组合函数具有 Unit 类型,因此它不会显式返回任何内容(就像其他语言中的 void 一样)。我想到的唯一其他方法是创建某种 MutableState<...> 变量,并通过参数将其作为副作用在两个函数之间传递。这是唯一的解决方案吗?如果它是一个解决方案,使用记住或记住可保存结构之间的影响或含义变化是什么,我应该如何实现它(欢迎简要解释)?

为了提供更多背景信息,我目前正在一个将列出交易的屏幕上工作。该屏幕有一个用于交易的“添加”和“删除”按钮。 “添加”按钮触发另一个可组合函数的调用,该函数显示一张卡片,该卡片充当应输入交易详细信息的表单。其中一个字段是货币的下拉菜单(另一个可组合项)。选择货币并返回主窗体后,货币名称应该以某种方式从下拉可组合项传递回可组合形式的表单,形式为字符串,甚至是具有字符串类型字段的包装类。

提前非常感谢。

android kotlin android-studio android-jetpack-compose side-effects
1个回答
0
投票

Compose 函数不得有任何副作用(除了那些明确设计的函数,如

SideEffect
LaunchedEffect
可组合项)。

相反,我们的想法是传递回调,如下所示:

@Composable
fun Form() {
    var currency by remember { mutableStateOf("") }

    CurrencyDropdown(currency) {
        currency = it
    }
}

@Composable
fun CurrencyDropdown(
    selected: String,
    onSelect: (String) -> Unit,
) {
       // when a new currency was selected, call:
       // onSelect("USD")
}

范例是仅向下传递数据(状态),而事件则向上传递。这称为单向数据流。请参阅 https://developer.android.com/jetpack/compose/architecture#udf 了解更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.