一,setup

setup在beforeCreate,created前,现在用它来取代这两个生命周期函数:

<template><div class="home-box"></div>
</template>
<script setup>
import { ref, reactive, onMounted } from 'vue';
//这里取代了beforeCreate,created生命周期函数,在Mounted之前执行
onMounted(() => {//这里是页面渲染完毕之后执行的代码
});
</script><style lang="scss" scoped>
</style>

二,ref

在setup中,我们新建一个变量:let val=4,将它属性绑定到html中。这只是普通的字符串或者数字。并不是响应式数据(修改val的值后html会自动更新这个值)。

<template><div class="home-box"><div class="title">{{ test }}</div></div>
</template>
<script setup>
let test = 'test';
setTimeout(() => {test = '8888';console.log(test);
}, 1500);//虽然1.5s之后test变成了8888,但是它不是响应式数据,并不会通知html中的test再更新一遍。
</script>

使用ref就可以把基本数据类型转化为响应式数据。

<template><div class="home-box"><div class="title">{{ test }}</div></div>
</template>
<script setup>
import { ref } from 'vue';
let test = ref('test');
setTimeout(() => {test.value = '8888';console.log(test);//打印出来会是RefImpl的实例对象
}, 1500);
</script>

你会发现ref把它们变成了RefImpl的实例对象,使用的时候需要name.value(但是因为vue3检测到你是ref对象,它就自动给你.value了,于是读取值时可以省略这个.value),但是修改值时,必须加这个.value。

这就是ref创建的RefImpl的实例对象,它的底层原理是Object.defineProperty里面的getset进行数据劫持然后进行响应式。

三,ref定义对象

let test = ref({ aaa: 'test' });
setTimeout(() => {test.value.aaa = '8888';console.log(test.value); //变成了procy对象
}, 1500);

ref定义对象时,是用到的Proxy,vue3把它封装在新函数reactive里,就相当于,ref中是对象,自动会调用reactive

也就是说,test是ref响应式数据,但是他的值变成了procy对象,在修改值的时候,也是需要test.value的,内部的则已经是procy对象,不需要.value了。

但是建议对象的响应式创建,直接使用reactive。

四,reactive

reactive只能定义对象类型的响应式数据,使用它,可以像vue2中那样定义所有响应式数据。

  let data=reactive({name:'燕儿',age:18,job:{occupation:'程序员',salary:'10k'},hobby:['刷剧','吃鸡','睡觉']})//方法function say(){data.job.salary='12k'data.hobby[0]='学习'}

data中的所有数据和vue2中的data()中的数据一样,全是响应式的。而且,reactive创建的数据不需要.value来修改值。

五,computed

在vue3中,把computed变成为组合式API,那么就意味着你要去引入它

import {reactive,computed} from 'vue'
let names=reactive({a:'阿',b:'斌'
})
fullName=computed(()=>{return names.a+'.'+names.b
})

和vue2中一样,计算属性根据你依赖的数据变更,如果依赖的数据没有变更,则不会重新计算。通常,我们并不建议去修改计算属性计算出来的值(fullName)。

六,watch

监听单个响应式数据时,当num发生变化的时候,会执行watch中的函数:

let num=ref('0')
watch(num,(newValue,oldValue)=>{console.log(`当前数字增加了,${newValue},${oldValue}`)
})

监听reactive:

let names=reactive({familyName: '鳌',age:23,job:{salary:10}})
watch(()=>names.age,(newValue,oldValue)=>{console.log('names改变了',newValue,oldValue)
})//监听names.age

监听多个属性:

watch([()=>names.age,()=>names.familyName],(newValue,oldValue)=>{console.log('names改变了',newValue,oldValue)
})

深度监听,有两种写法:

//第一种
watch(()=> names.job.salary,(newValue,oldValue)=>{console.log('names改变了',newValue,oldValue)
})
//第二种
watch(()=> names.job,(newValue,oldValue)=>{console.log('names改变了',newValue,oldValue)
},{deep:true})

watch监听computed

const iconMenus = computed(() => store.state.iconMenus.iconList);
const menu_item = ref(null);
watch(() => iconMenus.value,(newVal, oldVal) => {//需要在新的dom渲染完毕后触发。所以需要宏任务包裹下setTimeout(() => {iconContentHandle(newVal);}, 0);}
);
function iconContentHandle(list) {if (list.length > 0) {menu_item.value.children.forEach(element => {let parentWith = element.offsetWidth;let childrenWith = element.children[1].offsetWidth;if (childrenWith >= parentWith - 10) {element.children[1].classList.add('item-content-flag');} else {element.children[1].classList.remove('item-content-flag');}});}
}

七,watchEffect

相比于watch,他有两个特点:

自动默认开启了immediate:true
用到了谁就监视谁, watchEffect 不需要指定监听的属性,他会自动的收集依赖, 只要我们回调中引用到了响应式的属性, 那么当这些属性变更的时候,这个回调都会执行,而 watch 只能监听指定的属性而做出变更(v3开始可以同时指定多个)。
第二点就是 watch 可以获取到新值与旧值(更新前的值),而 watchEffect 是拿不到的。
第三点是 watchEffect 如果存在的话,在组件初始化的时候就会执行一次用以收集依赖(与computed同理),而后收集到的依赖发生变化,这个回调才会再次执行,而 watch 不需要,因为他一开始就指定了依赖。
watchEffect(()=>{console.log('watchEffect执行了')
})

八,通过ref获取并操作dom元素

<input  ref="uploadFile" />

然后在setup中通过ref获取dom元素,又因为是响应式的,所以需要使用.value来使用。

const uploadFile = ref(null);
而后在页面已经渲染之后:console.log('---', uploadFile.value);
uploadFile.value.click();

vue3的语法使用总结api相关推荐

  1. Vue3学习之旅--Vue3高级语法补充-自定义指令,vue插件,Teleport......

    文章目录 Vue3高级语法补充 自定义指令 认识自定义指令 实现方式一:默认实现 实现方式二:局部自定义指令 方式三:自定义全局指令 指令的生命周期 指令的参数和修饰符 自定义指令练习 时间格式化指令 ...

  2. vue3.0语法糖及ref、reactive、toRef、toRefs的区别

    vue3.0语法糖 前几天一个月薪35k的兄弟,给我推了一个人工智能学习网站,看了一段时间挺有意思的.包括语音识别.机器翻译等从基础到实战都有,很详细,分享给大家. 1.什么是setup语法糖 起初 ...

  3. pandas语法乱、API多?你需要整理一下!

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 丰色 发自 凹非寺 量子位 报道 | 公众号 QbitAI pand ...

  4. pandas语法乱、API多?你需要整理一下!|知乎讨论

    丰色 发自 凹非寺 量子位 报道 | 公众号 QbitAI pandas作为Python的一个强大扩展库,被很多人称为数据分析届的"瑞士军刀". 然而,它也被不少学习者诟病:语法很 ...

  5. js 表单设计器_准备迎接Vue3,使用Vue Composition API生成干净可扩展的表单

    表单是前端开发中最棘手的部分之一,您可能会在其中发现很多混乱的代码. Vue.js 2之类的基于组件的框架在提高前端代码的可伸缩性方面做了很多工作,但是形式问题仍然存在. 在本教程中,我将向您展示新的 ...

  6. 02.Vue3 基础语法:常用语法、列表渲染、事件绑定和表单双向绑定

    Vue3 基础语法 1. Vue 中应用和组件的基础概念 createApp createApp 表示创建一个 Vue 应用,存储在 app 变量中. 传入的参数表示,这个应用最外层的组件,应该如何展 ...

  7. Vue3 setup语法糖勾子函数使用简易教程(上)

    Vue3 setup语法糖勾子函数使用简易教程(上) 前几天一个月薪35k的兄弟,给我推了一个人工智能学习网站,看了一段时间挺有意思的.包括语音识别.机器翻译等从基础到实战都有,很详细,分享给大家. ...

  8. Vue3为什么要使用组合式API——Vue3的组合式API和Vue2的选项式API的优缺点

    Vue3为什么要使用组合式API--Vue3的组合式API和Vue2的选项式API的优缺点 1.Vue2为什么使用选项式API 2.Vue2如何使用组合式API 3.组合式API Vs 选项式API ...

  9. vue3.2-setup语法糖、组合式API、状态库Pinia归纳总结

    创建项目: vite脚手架创建项目: vue3+vite2+ts npm create vite@latest 一.页面组件结构 <template>home </template& ...

  10. Vue3 高级语法(二)—— 自定义指令、Teleport、Vue插件

    一.认识自定义指令 在Vue的模板语法中我们学习过各种各样的指令:v-show.v-for.v-model等等,除了使用这些指令之外,Vue也允许我们来自定义自己的指令. 注意:在Vue中,代码的复用 ...

最新文章

  1. Java虚拟机垃圾收集算法
  2. 如何让引擎蜘蛛天天光临你的网站
  3. 438. Find All Anagrams in a String
  4. 翻译:FireBug 1.10 新特性
  5. 保定linux第一版PPT-SVN for Linux
  6. mysql 5.7 pxc_mysql5.7 PXC安装记录
  7. kafka topic 一段时间不消费_全网最通俗易懂的 Kafka 入门
  8. uni - 使用npm
  9. C++ 实现反射机制(转载)
  10. 使用一个插件将Zend Framework应用程序的内容转换为xml
  11. C# 同一应用程序域不同线程之间的参数传递方式
  12. 语音识别智能开关 第一期
  13. 电脑消除,彻底清除电脑垃圾,让电脑运行更流畅!
  14. 三维立体地图开发项目书
  15. php8最新版本特性,PHP8 了解新特性
  16. 我的世界服务器额外植物学bug修复,[1.12.2-1.7.10][AnotherCommonBugFix——通用Bug修复]——可修复服务器常见的BUG...
  17. win10解决安装时的2503 2502问题
  18. 2015-06-17
  19. 星环科技自研技术,加速大数据从持久化、统一化、资产化、业务化到生态化
  20. 基恩士MC协议 虚拟服务器,Ethernet对应 小型2维码读取器 中距离型

热门文章

  1. 光盘文件导入服务器,web服务器 光盘文件
  2. mysql 密码sa_重置MySQL root密码
  3. 宝塔linux架设手游,守望黎明架-linux手工端设教程
  4. php 一次性订阅消息,解读一下一次性订阅消息
  5. java jpa 教程 查询_Spring Boot JPA 使用教程
  6. python爬取拉勾网给定关键词职位信息存入数据库_python爬取拉勾网职位数据的方法...
  7. Ubuntu18.04中安装virtualenv和virtualenvwrapper
  8. python 快速排序的实现
  9. Sql Server约束的学习一(主键约束、外键约束、唯一约束)
  10. HDU 2546 饭卡 动态规划01背包