vue 3.0 常用API 的介绍
vue3.0
生命周期
- 写法一 和vue2.x 一致 区别在于(beforeUnmount、unmount)名称不一样
- 写法二 在setup 中使用, 需要引用
如: import { onBeforeMount } from ‘vue’
Setup(){ onBeforeMount( () =>{} ) }
Hook
Hook:是一个函数、把setup函数中的组合api进行了封装,类似于vue2中的mixin,
Src目录下新建hooks文件夹 里面写各种逻辑的hook
toRef 和 torefs
在使用 reactive 创建对象后, 在模板中使用对象中的属性, 会多次书写 对象的名称。可以使用这两个api 来把要使用的 单独定义出来
const hero = reactive({
name: 'zhangsan',
age: 23,
family: {
mather: 'dd'
}
})
const name = toRef(hero, 'name')
const namgChange = () => {
hero.name = 'lisi'
}
<h1>{{hero.name}}</h1>
<h1>{{name}}</h1>
<button @click="namgChange">
变化
</button>
上面列子中对hero.name 修改和对 name修改时同等效果的
上面toRef 一次只能处理一个属性
toRefs 一次能处理多个属性
import { toRefs } from "vue";
setup() {
return {
...toRefs(Hero)
}
}
toRaw
操作场景 用于读取响应式数据,后续操作不会引起页面数据变化
将一个由reactive生成的响应式对象转为普通对象(ref生成的不行)
markRaw
标记一个对象永远不作为响应式对象
用法 markRaw(需要标记的对象)
customRef
创建一个自定义的ref,并对其依赖项跟踪和更新触发进行显式控制,customRef里面需要写一个函数,函数接收两个参数,并且应该返回一个带有 get 和 set 的对象
track () 在get中通知vue追踪return出去的数据变化
tigger() 在set中改完数据后 通知vue重新解析模板
<template>
<input v-model="keyword" />
<h3>{{keyword}}</h3>
</template>
<script>
import { customRef } from "vue";
export default {
name: 'Testvue',
setup() {
function myref(value,time = 1000) {
let timer;
return customRef((track, tigger) => {
return {
get() {
track() // 通知vue追踪value的变化
return value
},
set(newValue) {
clearTimeout(timer)
timer = setTimeout(() =>{
value = newValue
tigger() // 改完数据后 通知vue重新解析模板
}, time)
}
}
})
}
let keyword = myref('hello', 500)
return {
keyword
}
}
};
</script>
provide 和 inject
父组件用provide提供数据 后代组件用inject使用数据
父组件
<template>
<input v-model="keyword" />
<h3>{{keyword}}</h3>
<hellochild></hellochild>
</template>
<script>
import { customRef, provide } from "vue";
import hellochild from './hellochild.vue'
export default {
name: 'Testvue',
components: {
hellochild
},
setup() {
function myref(value,time = 1000) {
let timer;
return customRef((track, tigger) => {
return {
get() {
track() // 通知vue追踪value的变化
return value
},
set(newValue) {
clearTimeout(timer)
timer = setTimeout(() =>{
value = newValue
tigger() // 改完数据后 通知vue重新解析模板
}, time)
}
}
})
}
let keyword = myref('hello', 500)
provide('keyword', keyword)
return {
keyword
}
}
};
</script>
子组件
<template>
<div>
我是组件件, 看下 父组件的 keyword {{keyword}}
</div>
</template>
<script setup>
import {inject} from 'vue'
let keyword = inject('keyword')
</script>
Computed计算属性
有简写和完整写法之分,完整写法考虑读写
// 计算属性 简写 -- 单纯的读取
person.fullName = computed(() => {
return person.firstName + person.lastName
})
// 计算属性完整写法 --- 考虑修改
person.fullName = computed({
get() {
return person.firstName + person.lastName
},
set(value) {
const nameArr = value.split('-')
person.firstName = nameArr[0]
person.lastName = nameArr[1]
}
})
watchEffect
不用指明监听那个属性的变化,回调函数中用到哪个属性,就监听那个属性变化
watch监听
监听ref所定义的一个响应式数据
- 监听谁
- 回调函数
- 配置对象
<template>
<h3>当前数值:{{ sum }}</h3>
<button @click="sum++">增加</button>
</template>
<script>
import { ref, watch } from "@vue/runtime-core";
export default {
setup() {
let sum = ref(0);
watch(
sum,
(newValue, oldValue) => {
console.log(newValue, oldValue);
},
{
immediate: true, // 立即监听
deep: true, // 深度监听
}
);
return {
sum,
};
},
};
</script>
监听ref 所定义的多个响应式数据
当监听多个响应式数据时,将多个数据放在一个数组里面,这样监听的newValue和oldValue都也都是也数组的形式呈现
<template>
<h3>当前数值:{{ sum }}</h3>
<button @click="sum++">增加</button>
<h3>标题:{{ title }}</h3>
<button @click="title+='~'">增加</button>
</template>
<script>
import { ref, watch } from "@vue/runtime-core";
export default {
setup() {
let sum = ref(0);
let title = ref("hi~");
// 监听多个
watch(
[sum,title],
(newValue, oldValue) => {
console.log(newValue, oldValue);
},
{
immediate: true, // 立即监听
deep: true, // 深度监听
}
)
return {
sum,
title,
};
},
};
</script>
监听reactive 所定义的响应式数据的全部属性
无法正确获取oldValue,并且强制开启了深度监听。
监听reactive 所定义的某个属性
第一个参数要以回调函数返回写法
<template>
<h3>姓名:{{Hero.username}}</h3>
<h3>年龄:{{Hero.age}}</h3>
<button @click="Hero.age++">改变年龄</button>
<button @click="Hero.username += '~'">改变姓名</button>
</template>
<script>
import { reactive, watch } from "@vue/runtime-core";
export default {
setup() {
let Hero = reactive({
username: '李四',
age: 18,
job: {
j1: {
speak: '你好'
}
}
})
// reactive所定义的响应式数据的某个属性
watch(
()=>Hero.age, // 以回调形式拿到监听的属性
(newValue, oldValue) => {
console.log(newValue, oldValue);
},
{
immediate: true, // 立即监听
deep: true, // 深度监听
})
return {
Hero
};
},
};
</script>
监听reactive 所定义的数据的多个属性
如果监听的属性嵌套层次比较深 则需要开启深度监听
watch(
[()=>Hero.username, ()=>Hero.age, () =>Hero.job], // 以回调形式拿到监听的属性
(newValue, oldValue) => {
console.log(newValue, oldValue);
},
{
immediate: true, // 立即监听
deep: true, // 深度监听
})
vue 3.0 常用API 的介绍的更多相关文章
- 四. 几个Promise常用API的介绍与使用
四. 几个常用API的介绍与使用 1. Promise构造函数:Promise(excutor){} excutor函数:同步执行 (resolve, reject) => {} resolve ...
- Vue 3.0 Composition API - 中文翻译
Composition API 发布转载请附原文链接 https://www.cnblogs.com/zgh-blog/articles/composition_api.html 这两天初步了解了下 ...
- 🎉 Element UI for Vue 3.0 来了!
第一个使用 TypeScript + Vue 3.0 Composition API 重构的组件库 Element Plus 发布了 ~ 2016 年 3 月 13 日 Element 悄然诞生,经历 ...
- Vue 2.0入门基础知识之全局API
3.全局API 3-1. Vue.directive 自定义指令 Vue.directive用于自定义全局的指令 实例如下: <body> <div id="app&quo ...
- java基础3.0:Java常用API
本篇介绍Java基础中常用API使用,当然只是简单介绍,围绕重要知识点引入,巩固开发知识,深入了解每个API的使用,查看JavaAPI文档是必不可少的. 一.java.lang包下的API Java常 ...
- 小程序常用API介绍
小程序常用API接口 wx.request https网络请求 wx.request({ url: 'test.php', //仅为示例,并非真实的接口地址 method:"GET&qu ...
- 来自 Vue 3.0 的 Composition API 尝鲜
来自 Vue 3.0 的 Composition API 尝鲜:https://segmentfault.com/a/1190000020205747
- Vue 2.0 学习路线
「 Vue很难学吗 」 对于我这种从0.x版本就开始体验 vuejs 的人来说,当然不算难,那时候没各种脚手架和复杂搭配,仅仅是一个mvvm的解决方案库而已,解决了jq带来的繁琐操作dom痛点,所以就 ...
- 1.Vue.js的常用指令
Vue.js介绍 Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更易于理解的API,使得 ...
- html5 canvas常用api总结(一)
1.监听浏览器加载事件. window.addEventListener("load",eventWindowLoaded,false); load事件在html页面加载结束时发生 ...
随机推荐
- 【Git进阶】基于文件(夹)拆分大PR
背景 前段时间为了迁移一个旧服务到新项目,由此产生了一个巨大的PR,为了方便Code Review,最终基于文件夹,将其拆分成了多个较小的PR:现在这里记录下,后面可能还会需要. 演示 为了方便演示, ...
- Java---Stream入门
由于本文需要有一定的Lambda基础,所以如果不懂什么是Lambda的同学请移步:Java---Lambda 学习Stream的目的 函数式编程渐渐变成主流,而Stream是函数式编程的重点. 相对于 ...
- 使用 Elastic 技术栈构建 K8S 全栈监控 -4: 使用 Elastic APM 实时监控应用性能
文章转载自:https://www.qikqiak.com/post/k8s-monitor-use-elastic-stack-4/ 操作步骤 apm-servver连接es使用上一步创建的secr ...
- MySQL主从同步报错故障处理记录
从库上记录删除失败,Error_code: 1032 问题描述:在master上删除一条记录,而slave上找不到,导致报错 Last_SQL_Error: Could not execute Del ...
- 在云原生中监控JVM指标
一般 Java 集成 Prometheus 监控指标有两种方式.一种是依赖中引入,另外一种是通过agent执行. 依赖引入 <!-- The client --> <dependen ...
- redis cluster 6.2集群
redis最新版本:redis-6.2.1.tar.gz 安装的版本是redis-6.0.3 采用的主机: djz-server-001 192.168.2.163 7001,7002,Admin@1 ...
- 基于CentOS 8服务器来搭建FastDFS高可用集群环境
服务器版本 我们在服务器的命令行输入如下命令来查看服务器的内核版本. [root@localhost lib]# cat /etc/redhat-release CentOS Linux releas ...
- 项目的依赖包(node_modules)删除
快速删除依赖包一共分为三部 1.打开命令行(管理员身份),执行 npm i -g npkill 2.cd 进入到想删除的项目中,执行 npkill 3.执行完成会进入到npkill页面,等待搜索完成, ...
- 前端三件套 HTML+CSS+JS基础知识内容笔记
HTML基础 目录 HTML基础 HTML5标签 doctype 标签 html标签 head标签 meta标签 title标签 body标签 文本和超链接标签 标题标签 段落标签 换行标签 水平标签 ...
- Python(一)转义字符及操作符
转义字符 描述 \(在行尾时) 续航符 \\ 反斜杠符号 \' 单引号 \'' 双引号 \a 响铃 \b 退格(Backspace) \e 转义 \000 空 \n 转行 \v 纵向制表符 \t 横向 ...