Javascript 使用Vue 3(合成API)替换对象而不丧失反应性

Javascript 使用Vue 3(合成API)替换对象而不丧失反应性,javascript,typescript,vue.js,vuejs3,Javascript,Typescript,Vue.js,Vuejs3,我想更新我的对象并保持反应性selectedTime是一个日期对象,substractMonths将返回一个新的日期对象 问题是,这样做不会更新我的状态,因为Vue 3无法检测到对象的替换 我怎样才能把它修好?(我指定我使用了const selectedTime=ref(new Date())来创建反应对象) Substract函数确实返回新的Date对象 代码的一部分: 我尝试做的唯一一件事是执行一个返回新日期的函数,并用函数的返回值替换我的selectedTime。我终于解决了这个问题

我想更新我的对象并保持反应性
selectedTime
是一个日期对象,
substractMonths
将返回一个新的日期对象


问题是,这样做不会更新我的状态,因为Vue 3无法检测到对象的替换

我怎样才能把它修好?(我指定我使用了
const selectedTime=ref(new Date())
来创建反应对象)

Substract函数确实返回新的
Date
对象

代码的一部分:


我尝试做的唯一一件事是执行一个返回新日期的函数,并用函数的返回值替换我的
selectedTime

我终于解决了这个问题,因此我将描述解决方案

我创建了一个小示例:


{{currentTime.toString()}}
加一个月
函数addMonths(numberOfMonths,currentTime){
const x=currentTime.getDate();
currentTime.setMonth(currentTime.getMonth()+numberOfMonths);
log(`Function已用${currentTime}`调用);
如果(currentTime.getDate()!==x){
currentTime.setDate(0);
}
返回时间;
}
Vue无法检测到更改,因为我返回的对象与旧对象具有相同的引用。因此,解决方案是创建一个新对象,以便检测到更改

插入
返回电流时间,执行类似操作
返回新日期(当前时间)
将起作用


如果我能帮忙,我很高兴。我已经寻找解决方案很久了

您知道吗?您是否尝试将
substractMonths(1,selectedTime)
提取到一个计算值中?我正在使用,它是如何工作的?@BoussadjraBrahim为什么需要它?我只取一个日期,加上所选的月数,然后返回新的日期。我想我不需要计算方法,我只是想改变我的状态。例如,我做了一个日期选择器。@Misha可能是的副本。日期函数修改原始日期并返回它。由于对
selectedTime
的引用没有更改,Vue不会检测到它,因此模板不会更新。一种解决方法是让日期函数从原始日期创建一个新日期(我认为您可能打算从原始日期开始)。