vue 3.0新特性

参考:https://www.jianshu.com/p/e073909239ed

vue3.0新特性

  1. 在main.js中通过引入createApp方法来创建vue实例
【vue2】
import Vue from 'vue'
import App from './App.vue'

new Vue({
    render: h => h(App),
}).$mount('#app')

【vue3】
import { createApp } from 'vue'
import App from './App.vue'

createApp(App).mount('#app')
  1. composition API (组合API)
当组件变得越来越大时,逻辑关注点的列表也会增长。这可能会导致组件难以阅读和理解,且碎片化使得理解和维护复杂组件变得困难。选项的分离掩盖了潜在的逻辑问题。此外,在处理单个逻辑关注点时,我们必须不断地“跳转”相关代码的选项块。

如果能够将与同一个逻辑关注点相关的代码配置在一起会更好,于是 Composition API 应运而生。

使用Composition api的位置被称为setup


个人理解:简单来说,就是将同一个逻辑的所有API写在一起

  1. setup组件选项

组件选项在创建组件之前执行,一旦 props 被解析,并充当合成 API 的入口点

import { fetchUserRepositories } from '@/api/repositories'
import { ref, onMounted } from 'vue'

export default {
    setup (props) { //props传递过来的属性(此时setup中没有this,除了props,无法访问组件中的任何其他东西)
      const repositories = ref([]) // 定义一个变量
      const getUserRepositories = async () => { // 定义一个方法
        repositories.value = await fetchUserRepositories(props.user)
      }

      onMounted(getUserRepositories) // 生命周期钩子 当实例mounted后调用getUserRepositories方法

      return {
        repositories, // 返回一个data
        getUserRepositories // 返回一个method
      }
    }
}

setup语法糖(

<template>
  <button @click="inc">{{ count }}</button>
</template>

// Composition API
<script>
export default {
  setup() {
    const count = ref(0)
    const inc = () => count.value++

    return {
      count,
      inc,
    }
  },
}
</script>

// 使用了 Composition API 语法糖:
<script setup>
  import { ref } from 'vue'

  export const count = ref(0)
  export const inc = () => count.value++
</script>
  1. 单文件组件状态驱动css变量(就是可以在css中引入组件的状态)(
<template>
  <div class="text">hello</div>
</template>

<script>
export default {
  data() {
    return {
      color: 'red'
    }
  }
}
</script>

<style vars="{ color }">
.text {
  color: var(--color);
}
</style>
  1. 单文件组件

也就是说如果style标签加了scoped,可以通过 深度选择器、插槽选择器、全局选择器 作用其他范围的样式

<style scoped>
/* deep selectors */
::v-deep(.foo) {}
/* shorthand */
:deep(.foo) {}

/* targeting slot content */
::v-slotted(.foo) {}
/* shorthand */
:slotted(.foo) {}

/* one-off global rule */
::v-global(.foo) {}
/* shorthand */
:global(.foo) {}
</style>
  1. 全局和内部API已重构为可 tree-shakable

也就是下面这些API原本只能Vue.xxx来使用的,现在可以解构出来直接使用,从而获得最佳的文件大小;
Vue.nextTick
Vue.observable (用Vue.reactive替换)
Vue.version
Vue.compile
Vue.set
Vue.delete

【vue2】
// 全局 API Vue.nextTick() 不能tree-shaking
import Vue from 'vue'

Vue.nextTick(() => {
  // 一些和DOM有关的东西
})
【vue3】
import { nextTick } from 'vue'

nextTick(() => {
  // 一些和DOM有关的东西
})
  1. v-model
- 自定义v-model时,prop和事件默认名称已更改:
  prop: value -> modelValue
  event: input -> update:modelValue
- .sync和组件的model选项已移除,可用v-model作为替代
- 现在可以在同一个组件上使用多个 v-model 进行双向绑定;
- 现在可以自定义 v-model 修饰符
  比如自定义v-model.capitalize,绑定为字符串第一个字母的大写
  1. 上的key用法
【关于key】
-  vue3中v-if/v-else/v-else-if不建议使用key

- vue3中key应该被设置在template上

【关于v-if和v-for优先级】
- v-if  >  v-for 

【关于v-bind={object}的排序】
- 声明的顺序决定了它们如何合并
// 2.x中 id最终为red  3.x中 id为blue
<div id="red" v-bind="{ id: 'blue' }"></div>
  1. 关于ref
【vue2】
从$refs中获取的相应属性会是一个ref数组
【vue3】
将ref绑定到一个更灵活的函数上 (ele) => { ...//保存ele的操作 }:
template:
<div v-for="item in list" :ref="setItemRef"></div>

script:
import { ref, onBeforeUpdate, onUpdated } from 'vue'
export default {
  setup() {
    let itemRefs = []
    const setItemRef = el => {
      itemRefs.push(el)
    }
    onBeforeUpdate(() => {
      itemRefs = []
    })
    onUpdated(() => {
      console.log(itemRefs)
    })
    return {
      itemRefs,
      setItemRef
    }
  }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Vue3.的新特性包括: 1. 更快的渲染速度和更小的包大小 2. 更好的TypeScript支持 3. 更好的响应式系统 4. 更好的组合API 5. 更好的性能优化 Vue3.与Vue2.的区别包括: 1. Vue3.使用了Proxy代替了Object.defineProperty来实现响应式系统,提高了性能和可维护性。 2. Vue3.的组合API更加灵活,可以更好地组织和复用代码。 3. Vue3.的模板编译器也进行了优化,可以更好地支持动态组件和slot。 4. Vue3.的包大小更小,性能更好,同时也更容易进行Tree-shaking和按需加载。 5. Vue3.的TypeScript支持更加完善,可以更好地进行类型检查和代码提示。 ### 回答2: Vue 3.0Vue框架的最新版本,引入了很多新特性和改进,具体来说包括以下方面: 1.性能提升:Vue 3.0 引入了 Compiler 提升,同时使用了新的响应式系统和虚拟 DOM,使得整个框架的性能得到了很大程度的提升。 2. Composition API:在Vue 2.0中,我们常用的API是Options API,随着组件的复杂程度增加,Options API的代码逐渐变得冗长难以维护。为此Vue 3.0中引入了Composition API,该API采用函数式编程的思想,将组件内的逻辑进行聚合,比如可以将一个组件的生命周期和状态管理都放在一个函数内,提升了代码的可读性和可维护性。 3. Fragment支持:在Vue 2.0中,如果有多个根节点需要渲染,则必须使用一个外部的容器来包裹这些根节点。但这种方式不太优雅,可能会导致布局的混乱。Vue 3.0 中,支持使用 Fragment来解决这个问题,即多个根节点可以直接进行渲染。 4. Teleport:Vue 3.0 中的 Teleport 组件可以帮助我们将某个组件挂载到 DOM 结构中某个特定的父节点中。即一个组件可以在 DOM 树的任意位置进行渲染,解决了Vue 2.0的 Portal的问题,实现了更加灵活的组件渲染。 5. 改进的 TypeScript 支持:Vue 3.0 改进了 TypeScript 的定义文件,使得开发人员可以更加方便地使用 TypeScript 进行开发。 总体来说,Vue 3.0相比于 Vue 2.0,在性能和开发体验方面都有明显的提升,特别是Composition API的引入,可以大大提高代码的可读性和可维护性,使得Vue框架更加适合大型复杂应用的开发。 ### 回答3: Vue.js是一款流行的前端JavaScript框架,其主要特点是轻量级、高效率和易于使用。随着时间的推移,Vue.js的版本也在不断更新,其中最新版本的Vue.js 3.0引入了一些新的功能和改进,与Vue.js 2.0相比,其最大的差异在于性能和开发效率方面有了显著的提升。 1. 更快的渲染速度和更小的包大小: Vue.js 3.0采用了新的响应式系统Reactivity API,并重新设计了内部架构。这些设计使Vue.js 3.0的性能优于Vue.js 2.0,特别是在大规模应用程序中。此外,Vue.js 3.0采用了Tree-shaking技术,这使得Vue.js 3.0包的大小比Vue.js 2.0小30%以上。 2. 新的追踪机制: Vue.js 3.0采用了Proxy对象来改进响应式追踪的性能,这意味着当响应式对象发生变化时,只会触发必要的重渲染。这样可以避免不必要的DOM操作和渲染,从而提高Vue.js的整体性能。 3. Composition API: Vue.js 3.0引入了Composition API,这是一种新的API风格,旨在更好地组织Vue.js代码,使其更易于维护和重用。 Composition API 使得Vue.js的组件代码更像传统的JavaScript函数,而不是基于对象的API风格。 4. 更好的TypeScript支持: Vue.js 3.0通过更好的TypeScript定义支持来提高类型安全性。Vue.js 3.0还提供了新的 TypeScript 类型声明文件,这可以使得开发者在使用TypeScript时,享受到精确的代码补全和类型检测。 总之,Vue.js 3.0新特性主要集中在性能、开发效率和组件复用等方面。除了上述功能之外,Vue.js 3.0还引入了其他一些改进,例如更好的错误处理、更高效的动态渲染API和生命周期API等。所有这些功能的加入都意味着Vue.js 3.0将成为未来大规模应用程序的理想选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值