Vue 3.0 有哪些新特性值得我们提前了解

简介: Vue 3.0 有哪些新特性值得我们提前了解

一、迎接 Vue 3.0


1. 简介


网络异常,图片无法展示
|


Vue.js 作者兼核心开发者尤雨溪宣布 Vue 3.0 进入 Beta 阶段。


  • 已合并所有计划内的 RFC
  • 已实现所有被合并的 RFC
  • Vue CLI 现在通过 vue-cli-plugin-vue-next 提供了实验性支持


2. 新特性


重点关注:

  • 更快更省
    Object.defineProperty ——> Proxy
    重构 Virtual DOM
  • 完全的TypeScript
    团队开发更轻松
    架构更灵活,阅读源码更轻松
    可以独立使用Vue内部模块
  • Composition API(组合式API)
    一组低侵入式的、函数式的 API
    更好的逻辑复用与代码组织
    更好的类型推导


3. 参考资源



二、初始化项目


  1. 系统环境


npm -v
nrm ls


  1. 安装@vue/cli


npm install @vue/cli -g


  1. 创建项目


vue create 项目名


  1. 在项目中安装 vue-next插件,试用Vue3 beta

vue add vue-next


  1. 项目变化

import { createApp } from 'vue';
import App from './App.vue'
createApp(App).mount('#app')
  1. 启动项目


npm run serve


   补充:


  1. vue-devtools 暂不支持Vue 3.0
  2. VSCode中安装Vue 3 Snippets插件


三、setup函数


setup 函数是一个新的组件选项。作为在组件内使用 Composition API 的入口点。


1. 调用时机


setup 函数会在 beforeCreate 钩子之前被调用


2. 返回值


如果 setup 返回一个对象,则对象的属性可以在组件模板中被访问


3. 参数


第一个参数为 props,接收当前组件props选项的值,即获取父组件传递过来的参数


export default {
  props: {
    name: String,
  },
  setup(props) {
    console.log(props.name)
  },
}


第二个参数为context,接收一个上下文对象,该对象中包含了一些在vue 2.x 中需要通过 this 才能访问到属性


const MyComponent = {
  setup(props, context) {
    context.attrs
    context.slots
    context.emit
  }
}


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


四、响应式系统API


Vue 3.0提供的一组具有响应式特性的函数式API,都是以函数形式提供的


1. reactive


reactive()函数接收一个普通对象,返回该普通对象的响应式代理对象

简单来说,就是用来创建响应式的数据对象,等同于vue 2.xVue.observable()函数


步骤:


  1. 按需导入 reactive 函数


import { reactive } from 'vue'


  1. 调用 reactive 函数,创建响应式数据对象

setup() {
     // 创建响应式数据对象
    const data = reactive({count: 0})
     // 将响应式数据对象暴露出去
    return data;
}


2. ref


ref()函数接收一个参数值,返回一个响应式的数据对象。该对象只包含一个指向内部值的 .value 属性


  • 基本用法
  • 在模板中访问时,无需通过.value属性,它会自动展开
  • 在reactive对象中访问时,无需通过.value属性,它会自动展开


3. computed


computed() 函数用来创建计算属性,函数的返回值是一个 ref 的实例


  • 只读的计算属性
  • 可读可写的计算属性


4. readonly


readonly()函数接收一个对象(普通或响应式),返回一个原始对象的只读代理对象


5. watch


watch() 函数用来监视数据的变化,从而触发特定的操作,等同于 vue 2.x中的 this.$watch


  • 监视单个数据源
  • 监视多个数据源
  • 取消监视
  • 清除无效的异步任务


6. watchEffect


watchEffect()函数接收一个函数作为参数,并立即执行该函数,同时响应式追踪其依赖,并在其依赖变更时重新运行该函数。


五、响应式系统工具集


1. isRef


检查一个值是否为一个 ref 对象。


2. isReactive


检查一个对象是否是由 reactive 创建的响应式代理。


3. isReadonly


检查一个对象是否是由 readonly 创建的只读代理。


4. isProxy


检查一个对象是否是由 reactive 还是 readonly 方法创建的代理。


5.unref


如果参数是一个 ref 则返回它的 value,否则返回参数本身。它是 val = isRef(val) ? val.value : val 的语法糖。


6. toRef


toRef()函数用来将 reactive 对象的一个属性创建为一个 ref,并且这个 ref 具有响应性,可以被传递。


7. toRefs


toRefs()函数用来将 reactive 对象创建为一个普通对象,但该普通对象的每个属性都是一个 ref,并且这个 ref 具有响应性,可以被传递。


六、生命周期钩子函数


Vue 3.0 中的生命周期函数和 Vue 2.x 相比做了一些调整和变化,对应关系如下:


  • beforeCreate -> 使用 setup()
  • created -> 使用 setup()
  • beforeMount -> onBeforeMount
  • mounted -> onMounted
  • beforeUpdate -> onBeforeUpdate
  • updated -> onUpdated
  • beforeDestroy -> onBeforeUnmount
  • destroyed -> onUnmounted
  • errorCaptured -> onErrorCaptured


   这些生命周期钩子函数只能在 setup() 函数中使用


七、依赖注入


依赖注入就是祖先组件向后代组件传递数据,使用provide()inject() 函数来实现,功能类似 vue 2.x中的 provide/inject


这两个函数只能在 setup() 函数中使用:


  • 在祖先组件中使用provide()函数向下传递数据
  • 在后代组件中使用inject()函数获取上层传递过来的数据


八、模板 Refs


通过 ref()函数还可以引用页面上的元素或组件,功能类似于 vue 2.x中的 vm.$refs


步骤:


  1. setup() 中创建一个 ref 对象并返回它
  2. 在页面上为元素添加 ref 属性,并设置属性值与创建的 ref 对象的名称相同
  3. 当页面渲染完成后,可以通过该 ref 对象获取到页面中对应的DOM元素


相关文章
|
2月前
|
缓存 JavaScript UED
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
154 64
|
2月前
|
JavaScript 前端开发 API
Vue 3 中 v-model 与 Vue 2 中 v-model 的区别是什么?
总的来说,Vue 3 中的 `v-model` 在灵活性、与组合式 API 的结合、对自定义组件的支持等方面都有了明显的提升和改进,使其更适应现代前端开发的需求和趋势。但需要注意的是,在迁移过程中可能需要对一些代码进行调整和适配。
122 60
|
16天前
|
JavaScript API 数据处理
vue3使用pinia中的actions,需要调用接口的话
通过上述步骤,您可以在Vue 3中使用Pinia和actions来管理状态并调用API接口。Pinia的简洁设计使得状态管理和异步操作更加直观和易于维护。无论是安装配置、创建Store还是在组件中使用Store,都能轻松实现高效的状态管理和数据处理。
60 3
|
2月前
|
前端开发 JavaScript 测试技术
Vue3中v-model在处理自定义组件双向数据绑定时,如何避免循环引用?
Web 组件化是一种有效的开发方法,可以提高项目的质量、效率和可维护性。在实际项目中,要结合项目的具体情况,合理应用 Web 组件化的理念和技术,实现项目的成功实施和交付。通过不断地探索和实践,将 Web 组件化的优势充分发挥出来,为前端开发领域的发展做出贡献。
45 8
|
2月前
|
存储 JavaScript 数据管理
除了provide/inject,Vue3中还有哪些方式可以避免v-model的循环引用?
需要注意的是,在实际开发中,应根据具体的项目需求和组件结构来选择合适的方式来避免`v-model`的循环引用。同时,要综合考虑代码的可读性、可维护性和性能等因素,以确保系统的稳定和高效运行。
41 1
|
2月前
|
JavaScript
Vue3中使用provide/inject来避免v-model的循环引用
`provide`和`inject`是 Vue 3 中非常有用的特性,在处理一些复杂的组件间通信问题时,可以提供一种灵活的解决方案。通过合理使用它们,可以帮助我们更好地避免`v-model`的循环引用问题,提高代码的质量和可维护性。
49 1
|
2月前
|
JavaScript
在 Vue 3 中,如何使用 v-model 来处理自定义组件的双向数据绑定?
需要注意的是,在实际开发中,根据具体的业务需求和组件设计,可能需要对上述步骤进行适当的调整和优化,以确保双向数据绑定的正确性和稳定性。同时,深入理解 Vue 3 的响应式机制和组件通信原理,将有助于更好地运用 `v-model` 实现自定义组件的双向数据绑定。
|
2月前
|
JavaScript 索引
Vue 3.x 版本中双向数据绑定的底层实现有哪些变化
从Vue 2.x的`Object.defineProperty`到Vue 3.x的`Proxy`,实现了更高效的数据劫持与响应式处理。`Proxy`不仅能够代理整个对象,动态响应属性的增删,还优化了嵌套对象的处理和依赖追踪,减少了不必要的视图更新,提升了性能。同时,Vue 3.x对数组的响应式处理也更加灵活,简化了开发流程。
|
2月前
|
JavaScript 前端开发 API
从Vue 2到Vue 3的演进
从Vue 2到Vue 3的演进
53 0
|
2月前
|
JavaScript 前端开发 API
Vue.js响应式原理深度解析:从Vue 2到Vue 3的演进
Vue.js响应式原理深度解析:从Vue 2到Vue 3的演进
71 0