使用状态变量更新计算属性

     2023-02-24     268

关键词:

【中文标题】使用状态变量更新计算属性【英文标题】:Update computed property with state variable 【发布时间】:2019-09-26 16:55:51 【问题描述】:

我有以下情况:我正在创建一个Form,用户可以在其中输入一个TextField 中的金额。此外,用户可以通过Picker 选择货币。金额的格式为NumberFormatter,我想在用户更改货币时更新文本。

@State private var currencyCode = "EUR"

这是格式化程序:

private let currencyFormatter: NumberFormatter = 
    var formatter = NumberFormatter()
    formatter.numberStyle = .currency
    formatter.currencyCode = $currencyCode // something like this, but that's not working!
    return formatter
()

表格如下所示:

Form 
    Section 
        TextField("Enter a description", text: $reason)
        TextField("Amount", value: $amount, formatter: currencyFormatter)
            .keyboardType(.decimalPad)
    

    Section 
        Picker(selection: $currencyCode, label: Text("Currency")) 
            ForEach(codes, id: \.self)  code in
                Text(code)
            
        
    

【问题讨论】:

那么,您只是想知道如何在从选择器中选择货币时更新文本? 基本上是的,但是文本取决于格式化的货币。所以格式化的货币代码需要从选择器中更改。 【参考方案1】:

首先,您需要删除$$currencyCode 给你一个Binding<String>,但你想要的是值,而不是值的绑定。 (请参阅 this answer 我解释绑定的地方。)

其次,您要使用计算属性,因为您的数字格式化程序需要根据您选择的currencyCode 进行更改。把它放在你的视图结构中:

private var currencyFormatter: NumberFormatter 
    let formatter = NumberFormatter()
    formatter.numberStyle = .currency
    formatter.currencyCode = currencyCode
    return formatter

【讨论】:

好的,我明白了!谢谢你的解释。但是,每当我从 Picker 中选择一个新值时,TextField 总是会重置我的输入。 好的,所以当我将默认值设置为@State private var amount: Double = 0.0 时它工作得非常好。但是,如果我将其设为可选,格式化程序将不起作用。 我假设你的意思是如果金额为零,格式化程序返回一个空白字符串? 只要我创建@State var amount: Double? 并输入一个值,一旦我选择了一个不同的Picker 值,它总是会被重置(空白文本字段)。此外,文本不会被格式化为货币字符串。 现在想通了,感谢您的帮助。我正在使用自定义@Binding 变量并将其设置为TextField 的文本,这个答案帮助我解决了这个***.com/questions/56799456/…

计算属性不更新不同选项卡中的 UI

...ifferenttabs【发布时间】:2017-08-2404:15:18【问题描述】:我使用vuex进行状态管理并对用户进行身份验证火力基地我使用vuex-persistedstate将状态保存在cookie中在我的vuex商店中,我管理我的userdata(用户名,登录状态)如下我的store.js/a... 查看详情

如何从 vuejs 中的计算属性更新状态?

】如何从vuejs中的计算属性更新状态?【英文标题】:Howtoupdatestatefromacomputedpropertyininvuejs?【发布时间】:2021-01-1821:18:35【问题描述】:我想在名为computedFirstName的计算属性中更新我的状态数据,但我遇到了一些问题。我可以更改... 查看详情

VueJS 计算属性未在 DOM 上更新

...【发布时间】:2018-08-2813:13:56【问题描述】:我正在尝试使用VueJS进行文件上传。当一个文件被添加到输入字段时,它被缓冲并保存在vuex存储中。我很肯定状态会更新,这显示在vue-devtool中,我添加了一个按钮来检查它。但是,D... 查看详情

如何解决“在计算输出时更新持久变量或状态变量,因此它不能用于代数循环......”图表错误

】如何解决“在计算输出时更新持久变量或状态变量,因此它不能用于代数循环......”图表错误【英文标题】:Howtoresolve\'updatespersistentorstatevariableswhilecomputingoutputs,thereforeitcannotbeusedinanalgebraicloop....\'errorwithCharts【发布时间】:20... 查看详情

SwiftUI 计算属性显示“在视图更新期间修改状态,这将导致未定义的行为。”错误

】SwiftUI计算属性显示“在视图更新期间修改状态,这将导致未定义的行为。”错误【英文标题】:SwiftUIComputedPropertyshows"Modifyingstateduringviewupdate,thiswillcauseundefinedbehavior."error【发布时间】:2021-12-1807:14:58【问题描述】:我... 查看详情

绑定到 getter 的计算属性不会在从 Vuex 状态对象中按键删除项目时更新

】绑定到getter的计算属性不会在从Vuex状态对象中按键删除项目时更新【英文标题】:computedpropertiesboundtogettersarenotupdatingondeletingitemsbykeyfromaVuexstateobject【发布时间】:2019-01-2210:54:12【问题描述】:请问我们如何在Vuex状态对象中... 查看详情

使用计算字段反应状态

】使用计算字段反应状态【英文标题】:Reactstatewithcalculatedfields【发布时间】:2018-08-0213:12:27【问题描述】:我有一个反应组件,它具有属性和状态。state的某些字段包含输入数据(从输入控件提升),但state中也有字段必须根... 查看详情

vue如何管理下载状态

...Vue.js提供了一些方法来管理下载状态。一种常见的方法是使用Vue.js的计算属性来跟踪下载状态。计算属性是一种特殊的属性,它可以根据其他属性的值计算出新的值。在下载过程中,可以使用计算属性来跟踪下载进度和状态。例... 查看详情

在协程中使用全局状态变量?

】在协程中使用全局状态变量?【英文标题】:Usingglobalstatevariablesincoroutines?【发布时间】:2017-10-2014:43:01【问题描述】:我正在使用discord.py库构建一个不和谐机器人-因此,所有用户交互都必须在协程中进行,使用async定义并使... 查看详情

使用框架状态变量更新 JFrame 中的 JPanel 内容

】使用框架状态变量更新JFrame中的JPanel内容【英文标题】:UpdatingJPanelcontentinJFramebyusingaframestatevariable【发布时间】:2016-11-1214:54:32【问题描述】:我正在尝试找到一种在更改状态变量后如何更新面板内容的方法。具体在下面的... 查看详情

Vue 计算属性已更新,但组件未重新渲染

...ommits更改。为了在数据加载时处理组件状态,我在商店中使用了l 查看详情

使用 JSON 数据反应更新状态变量

】使用JSON数据反应更新状态变量【英文标题】:ReactupdatestatevariablewithJSONdata【发布时间】:2021-03-0700:15:12【问题描述】:App.js:functionApp()const[items,setItems]=useState([]);useEffect(()=>constsearchDB=()=>fetch("http://127.0.0.1:8443/subCol 查看详情

如何创建一个可重用的函数来设置变量对象属性的状态?

】如何创建一个可重用的函数来设置变量对象属性的状态?【英文标题】:HowcanIcreateareusablefunctionthatwillsetStateforavariableobjectproperty?【发布时间】:2020-01-0117:23:32【问题描述】:我有一个onChange函数来更新我所有表单输入的状态。... 查看详情

如何使用从子组件传递给组件的反应变量更新 redux 状态

】如何使用从子组件传递给组件的反应变量更新redux状态【英文标题】:Howtoupdatereduxstateusingareactvariablepasseduptothecomponentfromachild【发布时间】:2020-01-2603:59:54【问题描述】:在表单提交回调之后,我尝试使用从子组件传递给该组... 查看详情

NSTextField 不使用核心数据绑定更新计算属性

】NSTextField不使用核心数据绑定更新计算属性【英文标题】:NSTextFielddoesnotupdatecalculatedpropertyusingCoreDatabindings【发布时间】:2013-01-2317:27:52【问题描述】:SO新手;我的第一个问题:Re:CoreData,使用绑定的基于文档的应用程序:... 查看详情

Vue 计算属性改变存储状态

】Vue计算属性改变存储状态【英文标题】:Vuecomputedpropertychangesstorestate【发布时间】:2021-12-1622:17:11【问题描述】:我正在尝试构建一个简单的过滤器,用于对Vue中的数组进行排序。我有状态数据,由api调用更新,该调用仅在加... 查看详情

监听getter的Vuex计算属性不更新

...什么吗?计算的产品(isInCart是相关的,另一个只是表明状态更改有效)isInCart()varisInC 查看详情

Vuex 不更新使用 mapState 映射的计算变量

】Vuex不更新使用mapState映射的计算变量【英文标题】:VuexnotupdatingcomputedvariablemappedusingmapState【发布时间】:2017-04-1105:06:02【问题描述】:我lookedatseveralquestions来弄清楚我是什么做错了。在我看来一切设置正确。目标根据COMPONENTA... 查看详情