千家信息网

Vue.js 3.0的新特性有哪些

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要讲解了"Vue.js 3.0的新特性有哪些",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Vue.js 3.0的新特性有哪些"吧!1. 初始
千家信息网最后更新 2026年11月02日Vue.js 3.0的新特性有哪些

这篇文章主要讲解了"Vue.js 3.0的新特性有哪些",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Vue.js 3.0的新特性有哪些"吧!

1. 初始化项目

// ① npm i -g @vue/cli  // ② vue create my-project  // ③ npm install @vue/composition-api -S  // ④ main,js  import Vue from 'vue'  import VueCompositionApi from '@vue/composition-api'  Vue.use(VueCompositionApi)

2. setup方法

setup是vue3.x中新的操作组件属性的方法,它是组件内部暴露出所有的属性和方法的统一API。

2.1 执行时机

setup的执行时机在:beforeCreate 之后 created之前

setup(props, ctx) {      console.log('setup')    },    beforeCreate() {      console.log('beforeCreate')    },    created() {      console.log('created')    },

2.2 接受props数据

  
// 通过 setup 函数的第一个形参,接收 props 数据:  setup(props) {    console.log(props)  },  // 在 props 中定义当前组件允许外界传递过来的参数名称:  props: {      p1: String  }  /*  {}  p1: "传值给 com-setup"  get p1: ƒ reactiveGetter()  set p1: ƒ reactiveSetter(newVal)  __proto__: Object  */

2.3 context

setup 函数的第二个形参是一个上下文对象,这个上下文对象中包含了一些有用的属性,这些属性在 vue 2.x 中需要通过 this 才能访问到,在 vue 3.x 中,它们的访问方式如下:

setup(props, ctx) {      console.log(ctx)      console.log(this) // undefined    },  /*  attrs: Object  emit: ƒ ()  listeners: Object  parent: VueComponent  refs: Object  root: Vue  ...  */

注意:在 setup() 函数中无法访问到 this

3. reactive

reactive函数接收一个普通函数,返回一个响应式的数据对象。

reactive函数等价于 vue 2.x 中的 Vue.observable() 函数,vue 3.x 中提供了 reactive() 函数,用来创建响应式的数据对象,基本代码示例如下:

  

4. ref

ref() 函数用来根据给定的值创建一个响应式的数据对象,ref() 函数调用的返回值是一个对象,这个对象上只包含一个 .value 属性:

  

4.1 在 reactive 对象中访问 ref 创建的响应式数据

当把 ref() 创建出来的响应式数据对象,挂载到 reactive() 上时,会自动把响应式数据对象展开为原始的值,不需通过 .value 就可以直接被访问,例如:

setup() {    const refrefCount = ref(0)    const state = reactive({refCount})    console.log(state.refCount) // 输出 0    state.refCount++ // 此处不需要通过 .value 就能直接访问原始值    console.log(refCount) // 输出 1    return {      refCount    }  }

注意:新的 ref 会覆盖旧的 ref,示例代码如下:

setup() {    // 创建 ref 并挂载到 reactive 中    const c1 = ref(0);    const state = reactive({ c1 });    // 再次创建 ref,命名为 c2    const c2 = ref(9);    // 将 旧 ref c1 替换为 新 ref c2    state.c1 = c2;    state.c1++;   console.log(state.c1); // 输出 10    console.log(c2.value); // 输出 10    console.log(c1.value); // 输出 0  }

5. isRef

isRef() 用来判断某个值是否为 ref() 创建出来的对象;应用场景:当需要展开某个可能为 ref() 创建出来的值的时候,例如:

import { ref, reactive, isRef } from "@vue/composition-api";  export default {    setup() {      const unwrapped = isRef(foo) ? foo.value : foo    } };

6. toRefs

toRefs() 函数可以将 reactive() 创建出来的响应式对象,转换为普通的对象,只不过,这个对象上的每个属性节点,都是 ref() 类型的响应式数据。

  

7. computed计算属性

7.1 只读的计算属性

  

7.2 可读可写的计算属性

  

8. watch

watch() 函数用来监视某些数据项的变化,从而触发某些特定的操作,使用之前需要按需导入:

import { watch } from '@vue/composition-api'

8.1 基本用法

  

8.2 监视数据源

监视 reactive 类型的数据源:

  

监视 ref 类型的数据源:

export default {    setup() {      // 定义数据源      let count = ref(0);      // 指定要监视的数据源      watch(count, (count, prevCount) => {        console.log(count, prevCount)      })      setInterval(() => {        count.value += 2      }, 2000)      console.log(count.value)      return {        count      }    }  };

8.3 监听多个数据源

监视 reactive 类型的数据源:

export default {    setup() {      const state = reactive({count: 100, name: 'houfei'})      watch(        // 监听count name        [() => state.count, () => state.name],        // 如果变换 执行以下函数        ([newCount, newName], [oldCount, oldName]) => {          console.log(newCount, oldCount)          console.log(newName, oldName)        },        { lazy: true} // 在 watch 被创建的时候,不执行回调函数中的代码      )      setTimeout(() => {        state.count += 2        state.name = 'qweqweewq'      }, 3000)      return state    }  };

监视 ref 类型的数据源:

export default {    setup() {      // 定义数据源      const count = ref(10)      const name = ref('zs')      // 指定要监视的数据源      watch(        [count, name],        ([newCount, newName], [oldCount, oldName]) => {          console.log(newCount, oldCount)          console.log(newName, oldName)        },        { lazy: true}     )      setInterval(() => {        count.value += 2     }, 2000)      console.log(count.value)      return {        count      }    }  };

8.4 清除监视

在 setup() 函数内创建的 watch 监视,会在当前组件被销毁的时候自动停止。如果想要明确地停止某个监视,可以调用 watch() 函数的返回值即可,语法如下:

8.5 在watch中清除无效的异步任务

有时候,当被 watch 监视的值发生变化时,或 watch 本身被 stop 之后,我们期望能够清除那些无效的异步任务,此时,watch 回调函数中提供了一个 cleanup registrator function 来执行清除的工作。这个清除函数会在如下情况下被调用:

watch 被重复执行了

watch 被强制 stop 了

Template 中的代码示例如下:

Script 中的代码示例如下:

9. provide & inject 组件传值

provide() 和 inject() 可以实现嵌套组件之间的数据传递。这两个函数只能在 setup() 函数中使用。父级组件中使用 provide() 函数向下传递数据;子级组件中使用 inject() 获取上层传递过来的数据。

9.1 共享普通数据

app.vue 根组件:

  

06.son.vue son 组件:

  

07.grandson.vue son 组件:

  

9.2 共享ref响应式数据

app.vue 根组件:

  

06.son.vue son 组件:

  

07.grandson.vue son 组件:

template>    
grandson 组件

10. 节点的引用 template ref

10.1 dom的引用

  

10.2 组件的引用

App父组件:

  

06.son.vue子组件:

  

11 nextTick

  

感谢各位的阅读,以上就是"Vue.js 3.0的新特性有哪些"的内容了,经过本文的学习后,相信大家对Vue.js 3.0的新特性有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

数据 函数 组件 对象 监视 属性 数据源 文件 输出 任务 监听 代码 时候 类型 特性 方法 示例 变化 学习 普通 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网是第几次科技革命的成果 互联网科技官网 美国互联网保险保险科技 工业互联网科技新基建 易互联网科技有限公司 高科技与互联网 互联网科技公司有哪些 四个字互联网科技公司取名 温州喔噻互联网科技有限公司 创业天下互联网科技有限公司 互联网金融科技公司干啥的 湖北码尼互联网科技有限公司电话 洛阳共同富裕互联网科技有限公司 产业互联网科技服务公司 广东鹅鹅鹅互联网科技有限公司 济南小医互联网科技有限公司招聘 珠海东科互联网科技有限公司 青岛互联网科技园 每日互联网科技新闻 互联网科技快速发展优美句子 互联网科技有限公司图片 上海挚品互联网科技 互联网科技革命 九亚互联网科技 世界互联网领先科技成果获奖 互联网时代科技型公司的机会 美国五大互联网科技公司市值多少 盐城市攀科互联网科技有限公司 瑞安市蟠桃会互联网科技有限公司 互联网大会出现的黑科技
0