likes
comments
collection
share

vue3下的时间实时更新

作者站长头像
站长
· 阅读数 22

前言

vue3后还没仔细研究过具体改动,时间被催的比较急看了几节课稍微回顾了一下vue的知识点,发现出了一个组合式API——setup官网地址。 这一块还没仔细认真研究,生命周期钩子函数也有一些微妙的改变生命周期函数生命周期钩子。 过几天任务完成了再好好看看。现在先记录时间实时更新。

解决方案

先说解决方案再说思考过程,就放TS代码,html代码直接用就行,上代码(去除一些无关代码):

import { onMounted, reactive, toRefs } from 'vue'
const state = reactive({
    nowTime: new Date().toLocaleString(),
})

function getnowTime(nowTime: any): any {
    setInterval(() => {
        let date = new Date();
        nowTime.value = date.toLocaleString();
    }, 1000)
}
onMounted(() => {
    getnowTime(nowTime)
});
const { nowTime } = toRefs(state)

简单讲解一下代码,首先import引入,然后用reactive返回对象响应式副本建立变量nowTime,建立的时候进行初始化,本来直接new Date就行,后面跟着的方法是我为了看的方便加的。然后创建getnowTime函数,这个函数的作用是实时获取当前时间对象对前面变量nowTime进行更新,延时函数执行间隔一秒。最后在生命周期函数中执行这个延时函数。最后的最后把它导出。当然我个人觉得这个代码肯定性能不是特别好,但是比较赶时间就先凑合一下,后面用timer再进行优化。

错误理解

在一开始按照网上案例,参照 别人的文章稍微修改后这么写的:

import { onMounted, reactive, toRefs } from 'vue'
const state = reactive({
    circleUrl: 'https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png',
    userText: "管理员",
    projectName: "养老院管理系统",
    timer: " ",
    nowTime: new Date().toLocaleString(),
})

function getnowTime(nowTime: any): any {
    timer = setInterval(() => {
        nowTime = new Date() // 修改数据date
    }, 500)
}
onMounted(() => {
    getnowTime(nowTime)
});
const { circleUrl, userText, projectName, nowTime,timer } = toRefs(state)

写完后会报错: 无法分配到 "timer" ,因为它是常数 vue3下的时间实时更新 菜鸟技术有限每个字都看得懂,但是连在一起就不是特别理解了,有时间要好好看看new 这个 Date到底做了什么,暂时没想到处理结果,也不是特别理解timer这个定时器为什么别人用的可行。

于是我猜想是不是生命周期函数没用对,数据没更新,抱着这个想法看着vue的生命周期函数对着试了几个生命周期函数,去掉了timer,添加了打印,最后得出的结果就是onMounted没用错。

function getnowTime(nowTime: any): any {
    setInterval(() => {
        let date = new Date();
        nowTime = date.toLocaleString();
        console.log(nowTime);
    }, 1000)
}

生命周期函数没用错,打印的数据也没有问题,会不会是异步问题?

vue3下的时间实时更新

我百度了半天没找到解决方案,于是我打算先写个number类型的数据,从这个number数据进行延伸,后面发现一样的错误,number数据根本没有更新,通过打印这个number发现他不是数字。

vue3下的时间实时更新 然后打印number.value才是数字,这就把出错的原因找出来了,然后对应修改就可以正常运行了。

转载自:https://juejin.cn/post/7106156488799813662
评论
请登录