首页 > 其他分享 >vue3中使用ref语法糖

vue3中使用ref语法糖

时间:2023-04-17 14:01:11浏览次数:36  
标签:count vue const value 语法 readonly vue3 ref

自从引入组合式 API 的概念以来,一个主要的未解决的问题就是 ref 和响应式对象到底用哪个。
响应式对象存在解构丢失响应性的问题,而 ref 需要到处使用 .value 则感觉很繁琐,并且在没有类型系统的帮助时很容易漏掉 .value

写法优化

以上是官方原话。大概就是新的语法糖 可以让我们更方便的使用ref,而不用每次都写.value
大概就是把这样的代码,简化成这样

<script setup lang="ts">
import { ref } from 'vue'

const count = ref(0)
console.log(count.value)
const increment = ()=> {
  count.value++
}
</script>

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

简化成

<script setup lang="ts">
const count = $ref(0)
console.log(count.value)
const increment = ()=> {
  count++
}
</script>

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

每一个会返回 ref 的响应式 API 都有一个相对应的、以 $ 为前缀的宏函数。

1. ref -> $ref
2. computed -> $computed
3. shallowRef -> $shallowRef
4. customRef -> $customRef
5. toRef -> $toRef

怎么开启此功能

在vite中启用语法糖开关
打开vite.config.ts,添加如下代码

vue({reactivityTransform: true})  // 启用响应式语法糖$ref $computed $toRef

配置tsconfig.json(可选)
在compilerOptions下添加vue/ref-macros
不然会报错`TS2304: Cannot find name '$ref'
虽然不影响使用,但是会影响开发体验

"compilerOptions":{
  "types": ["vue/ref-macros"] 
} 

配置eslint(可选)
在eslintrc.cjs中加上global
不然会提示ESLint: '$ref' is not defined.(no-undef)

module.exports = {
  globals: {
    $ref: "readonly",
    $computed: "readonly",
    $shallowRef: "readonly",
    $customRef: "readonly",
    $toRef: "readonly"
  }
}; 

免配上边两个可选
如果不嫌麻烦,又不想代码中总是有误报错误的行为。
可以直接在vue代码中引入vue/ref-macros
这样就不用配置tsconfig.json和eslint了

<script setup lang="ts">
import { $ref } from "vue/macros";

const count = $ref(0)
console.log(count.value)
const increment = ()=> {
  count++
}
</script>

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

标签:count,vue,const,value,语法,readonly,vue3,ref
From: https://www.cnblogs.com/dingshaohua/p/17325617.html

相关文章

  • Vue3 vue-cli创建工程的工程结构分析
    视频不能用vue2的写法了componentsHelloWorld.vue<template><divclass="hello"><h1>{{msg}}</h1><p>Foraguideandrecipesonhowtoconfigure/customizethisproject,<br>checkoutthe......
  • 第五节:setState详解、render函数优化、数据不可变、ref获取DOM和组件
    一.        二.        三.         !作       者:Yaopengfei(姚鹏飞)博客地址:http://www.cnblogs.com/yaopengfei/声     明1:如有错误,欢迎讨论,请勿谩骂^_^。声     明2:原创博客请在转载......
  • 前端学习笔记——Vue3组件间数值传递
    依据个人的学习需求,对Vue官网中组件部分内容的搬运和总结,可用于参看,想详细了解Vue3这部分特性的可以直接参考官网内容:https://cn.vuejs.orgprops是一种特别的attributes,我们可以在组件上生命注册。比如:如果我们要传递给博客文章组建一个标题的话,我们则必须在该组件的props列表......
  • [oeasy]python0135_python_语义分析_ast_抽象语法树_abstract_syntax_tree
    语义分析_抽象语法树_反汇编回忆上次回顾了一下历史python是如何从无到有的看到Guido长期的坚持和努力python究竟是如何理解print("hello")的?这些ascii字母如何被组织起来执行?纯文本首先编写Guido的简历print("1982------Guidoincwi")print("1995------Guidoincnri")pri......
  • vue3中使用axios
    1、问题:在vue2中axios通常是经过封装的后挂载使用的,来处理token及报错处理,比如//main.jsimportajaxfrom'@/axios.js'Vue.prototype.ajax=ajax在项目中使用也很方便this.ajax就行了,那vue3中是如何简单、便捷的封装并使用呢2、思路:vue3中使用axios并不难,封装,然后......
  • vue3使用tinymce
    第一种方法:通过使用key云端调用安装@tinymce/tinymce-vuenpmi@tinymce/tinymce-vue去官网注册一个账号获取key,然后去https://www.tiny.cloud/get-tiny/language-packages/下载语言包,放在目录下的public里在组件中使用,工具栏可以是字符串或者数组,一行字符串可以看做......
  • tinymce封装成vue3组件
    封装成组件<scriptsetup>importEditorfrom'@tinymce/tinymce-vue'//引入tinymce开启本地模式import'tinymce/tinymce'//引入图标和主题等import'tinymce/themes/silver/theme'import'tinymce/icons/default/icons'import'tin......
  • Vue3组件通信直接参考案例
    https://juejin.cn/post/6999687348120190983#heading-7Vue3通信使用写法1.props用props传数据给子组件有两种方法,如下方法一,setup()方法写法//Parent.vue传送<child:msg1="msg1":msg2="msg2"></child><script>importchildfrom"./child.v......
  • [oeasy]python0135_python_语义分析_ast_抽象语法树_abstract_syntax_tree
    语义分析_抽象语法树_反汇编回忆上次回顾了一下历史python是如何从无到有的看到Guido长期的坚持和努力 ​ 添加图片注释,不超过140字(可选) python究竟是如何理解print("hello")的?这些ascii字母如何被组织起来执行? ......
  • 搜索引擎语法
     1、介绍一般,搜索引擎支持高级搜索语法。这里以百度https://www.baidu.com/为例。2、高级搜索页https://www.baidu.com/gaoji/advanced.html通过该页面,填写表单,进行相关配置可以实现高级搜索功能如果有多个选项,通过空格进行分隔3、高级搜索语法根据高级搜索页配置后的......