vue3中setup语法糖那些事儿

简介: vue3中setup语法糖那些事儿

vue3中setup语法糖那些事儿

什么是语法糖?

vue3相比于vue2有什么新的语法糖?

ref

reactive

watch

生命周期

Teleport

setup语法糖

`<script setup>`与传统vue3有何不同

传统vue3和setup语法糖,两者之间写法如何转换?

什么是语法糖?

⭐语法糖是指在编程语言中,一种特殊的语法形式,它并不影响语言的功能和能力,只是提供一种更加优雅、简洁、易读的语法形式,让代码更加易于理解和编写。通常,语法糖是编译器或解释器在编译或解释代码时将其转换成标准语法的过程,因此语法糖并不会增加代码的运行效率,只是提高了代码的可读性和可维护性。

在前端开发中,常见的语法糖有很多,例如:


ES6中的箭头函数,可以简化函数定义的写法;

Vue中的v-bind可以写成冒号,v-on可以写成@符号,可以简化模板中绑定事件和属性的写法;

React中的JSX语法,可以将HTML和JavaScript结合在一起,使代码更加易读。

总的来说,语法糖可以提高代码的可读性和可维护性,但也需要注意不要过度使用,以免影响代码的性能和可理解性。

vue3相比于vue2有什么新的语法糖?

⭐首先需要明确的是,vue3相比于vue2,有很多新的写法和语法糖,主要是基于Composition API的实现。

ref

Vue3中使用ref来定义响应式数据,其用法与Vue2中的data类似。

import { ref } from 'vue'
export default {
  setup() {
    const count = ref(0)
    return {
      count
    }
  }
}

reactive

reactive函数用来创建响应式对象,可以将一个普通对象转换为响应式对象。与Vue2中的computed类似,Vue3中的computed也是基于reactive实现的。

import { reactive, computed } from 'vue'
export default {
  setup() {
    const state = reactive({
      count: 0,
      doubleCount: computed(() => state.count * 2)
    })
    return {
      state
    }
  }
}

watch

Vue3中的watch函数可以监听响应式数据的变化,其用法与Vue2中的watch类似。

import { watch } from 'vue'
export default {
  setup() {
    const count = ref(0)
    watch(count, (newValue, oldValue) => {
      console.log(`count的值从${oldValue}变为${newValue}`)
    })
    return {
      count
    }
  }
}

生命周期

在Vue3中,生命周期钩子函数被重构为setup函数中的普通函数,例如created钩子函数可以被拆分为beforeCreatecreated两个函数

import { onBeforeCreate, onCreated } from 'vue'
export default {
  setup() {
    onBeforeCreate(() => {
      console.log('组件实例创建之前')
    })
    onCreated(() => {
      console.log('组件实例创建之后')
    })
    return {}
  }
}

Teleport

Vue3中新增了Teleport组件,用于将组件的内容插入到指定的DOM节点中,其用法与Vue2中的slot类似

<template>
  <teleport to="body">
    <div>Teleport到body中了</div>
  </teleport>
</template>

setup语法糖

⭐⭐setup函数是Vue3中的新特性,它是用来替代Vue2中的data、computed、watch等选项的,是一种新的组件选项。可以说,setup函数是Vue3中最重要的语法糖之一。setup函数是一个普通的函数,它接收两个参数:props和context。其中,props是组件的属性对象,context是组件的上下文对象,包含了一些Vue3的API。


在setup函数中,我们可以使用Vue3提供的Composition API来定义组件的响应式数据、计算属性、方法、生命周期钩子等。与Vue2中的选项不同,setup函数中的代码是纯粹的JavaScript代码,易于理解和维护。


除此之外,setup函数还有以下特点:


setup函数的返回值是一个对象,对象中的属性和方法可以在模板中直接使用。

setup函数中的响应式数据必须使用ref、reactive等API来创建,不能直接定义在setup函数中。

setup函数中的计算属性和方法可以直接定义为普通函数,无需使用computed和methods选项。

setup函数中的生命周期钩子函数也被重构了,可以使用onBeforeMount、onMounted等API来定义。

<script setup>与传统vue3有何不同

<script setup>是Vue 3中的新特性,它旨在简化单文件组件的编写。相较于传统Vue 3中的<script>标签,<script setup>具有以下不同点:不需要导入vue模块:在<script>标签中使用Vue时需要导入vue模块,而在<script setup>中不需要。

不需要定义data、computed、methods等选项:在<script>标签中需要通过data函数来定义响应式数据,在computed和methods选项下定义计算属性和方法。但是在<script setup>中可以直接使用响应式变量和计算属性,这些变量和属性都会被自动处理为响应式的。

props和context对象自动注入:在<script setup>中可以直接使用props和context对象,无需通过参数或者导入来获取。

单文件组件支持更多类型:除了.vue文件之外,还支持使用.tsx和.jsx文件作为单文件组件,并且可与<script setup>一起使用。

⭐⭐⭐将传统Vue 3代码转换为<script setup>代码时,主要做法总结一下,大概有4种:

⭐第一种:将原先放置于data选项下的响应式变量直接声明即可,例如将

 data: () => ({ 
   num: 10
  })

替换为

const num = ref(10)

⭐第二种:计算属性可以直接作为函数声明并返回值;方法也可以直接声明成函数


⭐第三种:在<template>标签中使用的响应式变量和计算属性,需要通过defineExpose暴露出来才能在父组件中使用。比如说:

const state = reactive({ 
  count: 0 
}); 
defineExpose({ state });

⭐第四种:propscontext对象直接在函数参数中声明即可

生命周期函数与传统Vue 3写法相同,可以继续使用

传统vue3和setup语法糖,两者之间写法如何转换?

在这里,我直接上一段代码说明一下。

传统vue3写法:

<template>
  <div>{{ count }}</div>
</template>
<script>
import { reactive } from "vue";
export default {
  data: () => ({
    count: 0
  }),
  methods: {
    increment() {
      this.count++;
    }
  },
  created() {
    console.log('语法糖你好');
  }
};
</script>

setup语法糖的写法

<template>
  <div>{{ count }}</div>
</template>
<script setup>
import { ref, onMounted } from 'vue'
let count = ref(0)
function increment() {
   count.value++
}
onMounted(() => {
   console.log('语法糖你好')
})
</script setup>

这种技术,写法,观念的更新其实是很好的,一时半会难以接受很正常。但是新写法会使得我们的代码更加简洁、灵活、易于维护。也使我们能够更好地组织代码,提高开发效率。

为语法糖干杯!

相关文章
|
23天前
|
缓存 JavaScript UED
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
126 64
|
23天前
|
前端开发 JavaScript 测试技术
Vue3中v-model在处理自定义组件双向数据绑定时,如何避免循环引用?
Web 组件化是一种有效的开发方法,可以提高项目的质量、效率和可维护性。在实际项目中,要结合项目的具体情况,合理应用 Web 组件化的理念和技术,实现项目的成功实施和交付。通过不断地探索和实践,将 Web 组件化的优势充分发挥出来,为前端开发领域的发展做出贡献。
29 8
|
22天前
|
存储 JavaScript 数据管理
除了provide/inject,Vue3中还有哪些方式可以避免v-model的循环引用?
需要注意的是,在实际开发中,应根据具体的项目需求和组件结构来选择合适的方式来避免`v-model`的循环引用。同时,要综合考虑代码的可读性、可维护性和性能等因素,以确保系统的稳定和高效运行。
22 1
|
22天前
|
JavaScript
Vue3中使用provide/inject来避免v-model的循环引用
`provide`和`inject`是 Vue 3 中非常有用的特性,在处理一些复杂的组件间通信问题时,可以提供一种灵活的解决方案。通过合理使用它们,可以帮助我们更好地避免`v-model`的循环引用问题,提高代码的质量和可维护性。
32 1
|
23天前
|
JavaScript
在 Vue 3 中,如何使用 v-model 来处理自定义组件的双向数据绑定?
需要注意的是,在实际开发中,根据具体的业务需求和组件设计,可能需要对上述步骤进行适当的调整和优化,以确保双向数据绑定的正确性和稳定性。同时,深入理解 Vue 3 的响应式机制和组件通信原理,将有助于更好地运用 `v-model` 实现自定义组件的双向数据绑定。
|
26天前
|
JavaScript API 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
28天前
|
JavaScript 前端开发 开发者
vue 数据驱动视图
总之,Vue 数据驱动视图是一种先进的理念和技术,它为前端开发带来了巨大的便利和优势。通过理解和应用这一特性,开发者能够构建出更加动态、高效、用户体验良好的前端应用。在不断发展的前端领域中,数据驱动视图将继续发挥重要作用,推动着应用界面的不断创新和进化。
|
2天前
|
JavaScript 关系型数据库 MySQL
基于VUE的校园二手交易平台系统设计与实现毕业设计论文模板
基于Vue的校园二手交易平台是一款专为校园用户设计的在线交易系统,提供简洁高效、安全可靠的二手商品买卖环境。平台利用Vue框架的响应式数据绑定和组件化特性,实现用户友好的界面,方便商品浏览、发布与管理。该系统采用Node.js、MySQL及B/S架构,确保稳定性和多功能模块设计,涵盖管理员和用户功能模块,促进物品循环使用,降低开销,提升环保意识,助力绿色校园文化建设。
|
29天前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱前端的大一学生,专注于JavaScript与Vue,正向全栈进发。博客分享Vue学习心得、命令式与声明式编程对比、列表展示及计数器案例等。关注我,持续更新中!🎉🎉🎉
36 1
vue学习第一章
|
29天前
|
JavaScript 前端开发 索引
vue学习第三章
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中的v-bind指令,包括基本使用、动态绑定class及style等,希望能为你的前端学习之路提供帮助。持续关注,更多精彩内容即将呈现!🎉🎉🎉
26 1
vue学习第三章
下一篇
DataWorks