javascript 当我使用setInterval时,vue.js时钟不刷新

0sgqnhkj  于 2022-12-10  发布在  Java
关注(0)|答案(1)|浏览(359)

我正在创建一个简单的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的文章,所以是的,这是一个大问题。

i7uaboj4

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来检查。

相关问题