我正在创建一个简单的vue.js时钟,这就是为什么我真的很困惑为什么它不工作。我试图实现我在网上找到的多个解决方案,但每一个都未能解决这个问题。
应用程序是使用合成API用npm init vue@latest
.im初始化的。
下面是我的js:
import {
reactive,
computed,
onMounted,
onBeforeUnmount
} from 'vue';
const data = reactive({
date: '',
time: ''
});
const today = new Date();
const getCurrentTime = () => {
const hours = today.getHours();
const minutes = today.getMinutes();
const seconds = today.getSeconds();
const zeroPadding = (num) => {
if (num < 10) {
return `0${num}`
} else {
return num;
}
};
data.time = `${zeroPadding(hours)}:${zeroPadding(minutes)}:${zeroPadding(seconds)}`;
}
onMounted(() => {
setInterval(getCurrentTime, 1000);
});
下面是html:
<div class="time">
<time class="time__date">{{ data.date }}</time>
<time class="time__hour">{{ data.time}}</time>
</div>
我甚至复制了这个解决方案https://dev.to/snehalkadwe/digital-clock-using-vue-3-composition-api-5cmc,但是它也没有更新时钟。我已经受够了,这是我第一篇关于stackoverflow的文章,所以是的,这是一个大问题。
1条答案
按热度按时间i7uaboj41#
@dystrykt9以下是工作示例。https://codesandbox.io/s/digital-clock-forked-32xmoh
问题是今天的变量是不变的(通过常数i的平均值,而不是
const
)。它设置一次,在setInterval
中查看每次在相同时间设置的今天变量(小时、分钟和秒)。Reactdata.time
值每次都相同。但我们需要的是today变量需要用最新时间(即小时)进行更新。分钟和秒。我也不明白data.date
的意思。可能是你可以使用ref或单个属性,也可能是你正在为不同的逻辑使用它,但在问题代码片段中不存在。解决方案是将total变量放在setInterval中,以便每次都将该变量设置为最新时间(小时、分钟和秒)。
为了更好地了解这个问题,我在
setInterval
回调函数中有console.log。你可以在回调函数外部和内部通过设置today来检查。