HarmonyOS鸿蒙Next中用@State装饰的Date对象无法使用
HarmonyOS鸿蒙Next中用@State装饰的Date对象无法使用
我想使用TimePicker组件,在struct中定义了[@State](/user/State)装饰的Date对象之后,在TimePicker组件中展示时报错,代码如下:
如果在Text中写`this.selectedStartTime.toString()`会直接报错,报错信息如下:
但是如果这个Date对象没有被[@State](/user/State)装饰,则可以正常使用。
PS:我现在的解决方案是再创建了一个新的响应式变量,专门用来存储时间信息,然后在Time Picker的`onAccept`回调中同步更改新的响应式变量,但在提交的时候仍然提交没有被[@State](/user/State)修饰的Date对象。如下:
但是我还是对上面的问题([@State](/user/State)装饰的Date对象无法使用)比较疑惑,希望有大佬可以解答一下😭
更多关于HarmonyOS鸿蒙Next中用@State装饰的Date对象无法使用的实战教程也可以访问 https://www.itying.com/category-93-b0.html
看其他帖子有人回复说是@State
支持的类型还不多,Date
类型好像是不支持的,我自己测试的时候也是使用Date
类型报错Not a Date Object
,改为string类型就没问题。
更多关于HarmonyOS鸿蒙Next中用@State装饰的Date对象无法使用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
噢噢,有道理,谢谢啊,
我想写的是一个提交表单,表单上有一个时间选择器的字段。字段上会显示当前选择的时间,点击之后会弹出弹窗。我想的是在弹窗点击确定的onAccept回调里对@State修饰的Date对象进行一个更新(用setHour)方法,这样就可以更新这个字段上显示的时间(将它更新到刚刚选择的时间),
显示的时间使用@State timeStr:string,弹窗确定直接this.timeStr=弹窗返回的值,
我后来采用的方法和这种方法类似,但是我不太明白为什么Date对象在被@State装饰过后就不能作为一个普通的Date对象使用了🧐,
感谢,在网上边搜边想弄了一天,结果来开发社区一找就遇到有相同问题的人了,这下豁然开朗了,问题解决可以睡个好觉了.顺便说下我的解决办法,设置三个@State string类型分别存储年月日,而不是用date类型。再onAccept()中依次修改:
这个和我下面给出的方法应该是一样的哈哈哈哈,应该暂时只能这么做了,
在HarmonyOS鸿蒙Next中,@State
装饰器用于管理组件的状态。Date
对象无法直接使用@State
装饰器,因为@State
要求状态数据是可序列化的,而Date
对象本身是不可序列化的。你可以将Date
对象转换为时间戳(如number
类型)来存储状态,或者使用@Observed
和@ObjectLink
来处理复杂对象的状态管理。