vue3.0

生命周期

  1. 写法一 和vue2.x 一致 区别在于(beforeUnmount、unmount)名称不一样
  2. 写法二 在setup 中使用, 需要引用

    如: import { onBeforeMount } from ‘vue’

    Setup(){ onBeforeMount( () =>{} ) }

Hook

Hook:是一个函数、把setup函数中的组合api进行了封装,类似于vue2中的mixin,

Src目录下新建hooks文件夹 里面写各种逻辑的hook

toRef 和 torefs

在使用 reactive 创建对象后, 在模板中使用对象中的属性, 会多次书写 对象的名称。可以使用这两个api 来把要使用的 单独定义出来

  1. const hero = reactive({
  2. name: 'zhangsan',
  3. age: 23,
  4. family: {
  5. mather: 'dd'
  6. }
  7. })
  8. const name = toRef(hero, 'name')
  9. const namgChange = () => {
  10. hero.name = 'lisi'
  11. }
  12. <h1>{{hero.name}}</h1>
  13. <h1>{{name}}</h1>
  14. <button @click="namgChange">
  15. 变化
  16. </button>

上面列子中对hero.name 修改和对 name修改时同等效果的

上面toRef 一次只能处理一个属性

toRefs 一次能处理多个属性

  1. import { toRefs } from "vue";
  2. setup() {
  3. return {
  4. ...toRefs(Hero)
  5. }
  6. }

toRaw

操作场景 用于读取响应式数据,后续操作不会引起页面数据变化

将一个由reactive生成的响应式对象转为普通对象(ref生成的不行)

markRaw

标记一个对象永远不作为响应式对象

用法 markRaw(需要标记的对象)

customRef

创建一个自定义的ref,并对其依赖项跟踪和更新触发进行显式控制,customRef里面需要写一个函数,函数接收两个参数,并且应该返回一个带有 get 和 set 的对象

track () 在get中通知vue追踪return出去的数据变化

tigger() 在set中改完数据后 通知vue重新解析模板

  1. <template>
  2. <input v-model="keyword" />
  3. <h3>{{keyword}}</h3>
  4. </template>
  5. <script>
  6. import { customRef } from "vue";
  7. export default {
  8. name: 'Testvue',
  9. setup() {
  10. function myref(value,time = 1000) {
  11. let timer;
  12. return customRef((track, tigger) => {
  13. return {
  14. get() {
  15. track() // 通知vue追踪value的变化
  16. return value
  17. },
  18. set(newValue) {
  19. clearTimeout(timer)
  20. timer = setTimeout(() =>{
  21. value = newValue
  22. tigger() // 改完数据后 通知vue重新解析模板
  23. }, time)
  24. }
  25. }
  26. })
  27. }
  28. let keyword = myref('hello', 500)
  29. return {
  30. keyword
  31. }
  32. }
  33. };
  34. </script>

provide 和 inject

父组件用provide提供数据 后代组件用inject使用数据

父组件

  1. <template>
  2. <input v-model="keyword" />
  3. <h3>{{keyword}}</h3>
  4. <hellochild></hellochild>
  5. </template>
  6. <script>
  7. import { customRef, provide } from "vue";
  8. import hellochild from './hellochild.vue'
  9. export default {
  10. name: 'Testvue',
  11. components: {
  12. hellochild
  13. },
  14. setup() {
  15. function myref(value,time = 1000) {
  16. let timer;
  17. return customRef((track, tigger) => {
  18. return {
  19. get() {
  20. track() // 通知vue追踪value的变化
  21. return value
  22. },
  23. set(newValue) {
  24. clearTimeout(timer)
  25. timer = setTimeout(() =>{
  26. value = newValue
  27. tigger() // 改完数据后 通知vue重新解析模板
  28. }, time)
  29. }
  30. }
  31. })
  32. }
  33. let keyword = myref('hello', 500)
  34. provide('keyword', keyword)
  35. return {
  36. keyword
  37. }
  38. }
  39. };
  40. </script>

子组件

  1. <template>
  2. <div>
  3. 我是组件件, 看下 父组件的 keyword {{keyword}}
  4. </div>
  5. </template>
  6. <script setup>
  7. import {inject} from 'vue'
  8. let keyword = inject('keyword')
  9. </script>

Computed计算属性

有简写和完整写法之分,完整写法考虑读写

  1. // 计算属性 简写 -- 单纯的读取
  2. person.fullName = computed(() => {
  3. return person.firstName + person.lastName
  4. })
  5. // 计算属性完整写法 --- 考虑修改
  6. person.fullName = computed({
  7. get() {
  8. return person.firstName + person.lastName
  9. },
  10. set(value) {
  11. const nameArr = value.split('-')
  12. person.firstName = nameArr[0]
  13. person.lastName = nameArr[1]
  14. }
  15. })

watchEffect

不用指明监听那个属性的变化,回调函数中用到哪个属性,就监听那个属性变化

watch监听

监听ref所定义的一个响应式数据
  1. 监听谁
  2. 回调函数
  3. 配置对象
  1. <template>
  2. <h3>当前数值:{{ sum }}</h3>
  3. <button @click="sum++">增加</button>
  4. </template>
  5. <script>
  6. import { ref, watch } from "@vue/runtime-core";
  7. export default {
  8. setup() {
  9. let sum = ref(0);
  10. watch(
  11. sum,
  12. (newValue, oldValue) => {
  13. console.log(newValue, oldValue);
  14. },
  15. {
  16. immediate: true, // 立即监听
  17. deep: true, // 深度监听
  18. }
  19. );
  20. return {
  21. sum,
  22. };
  23. },
  24. };
  25. </script>
监听ref 所定义的多个响应式数据

当监听多个响应式数据时,将多个数据放在一个数组里面,这样监听的newValue和oldValue都也都是也数组的形式呈现

  1. <template>
  2. <h3>当前数值:{{ sum }}</h3>
  3. <button @click="sum++">增加</button>
  4. <h3>标题:{{ title }}</h3>
  5. <button @click="title+='~'">增加</button>
  6. </template>
  7. <script>
  8. import { ref, watch } from "@vue/runtime-core";
  9. export default {
  10. setup() {
  11. let sum = ref(0);
  12. let title = ref("hi~");
  13. // 监听多个
  14. watch(
  15. [sum,title],
  16. (newValue, oldValue) => {
  17. console.log(newValue, oldValue);
  18. },
  19. {
  20. immediate: true, // 立即监听
  21. deep: true, // 深度监听
  22. }
  23. )
  24. return {
  25. sum,
  26. title,
  27. };
  28. },
  29. };
  30. </script>
监听reactive 所定义的响应式数据的全部属性

无法正确获取oldValue,并且强制开启了深度监听。

监听reactive 所定义的某个属性

第一个参数要以回调函数返回写法

  1. <template>
  2. <h3>姓名:{{Hero.username}}</h3>
  3. <h3>年龄:{{Hero.age}}</h3>
  4. <button @click="Hero.age++">改变年龄</button>
  5. <button @click="Hero.username += '~'">改变姓名</button>
  6. </template>
  7. <script>
  8. import { reactive, watch } from "@vue/runtime-core";
  9. export default {
  10. setup() {
  11. let Hero = reactive({
  12. username: '李四',
  13. age: 18,
  14. job: {
  15. j1: {
  16. speak: '你好'
  17. }
  18. }
  19. })
  20. // reactive所定义的响应式数据的某个属性
  21. watch(
  22. ()=>Hero.age, // 以回调形式拿到监听的属性
  23. (newValue, oldValue) => {
  24. console.log(newValue, oldValue);
  25. },
  26. {
  27. immediate: true, // 立即监听
  28. deep: true, // 深度监听
  29. })
  30. return {
  31. Hero
  32. };
  33. },
  34. };
  35. </script>
监听reactive 所定义的数据的多个属性

如果监听的属性嵌套层次比较深 则需要开启深度监听

  1. watch(
  2. [()=>Hero.username, ()=>Hero.age, () =>Hero.job], // 以回调形式拿到监听的属性
  3. (newValue, oldValue) => {
  4. console.log(newValue, oldValue);
  5. },
  6. {
  7. immediate: true, // 立即监听
  8. deep: true, // 深度监听
  9. })



vue 3.0 常用api 的简介的更多相关文章

  1. Vue 3.0 Composition API - 中文翻译

    Composition API 发布转载请附原文链接 https://www.cnblogs.com/zgh-blog/articles/composition_api.html 这两天初步了解了下 ...

  2. 🎉 Element UI for Vue 3.0 来了!

    第一个使用 TypeScript + Vue 3.0 Composition API 重构的组件库 Element Plus 发布了 ~ 2016 年 3 月 13 日 Element 悄然诞生,经历 ...

  3. [转] Immutable 常用API简介

    本文主要整理了Immutable.js常用API的使用. Immutable 是什么? 关于Immutable的定义,官方文档是这样说的: Immutable data encourages pure ...

  4. Immutable 常用API简介

    本文主要整理了Immutable.js常用API的使用. Immutable 是什么? 关于Immutable的定义,官方文档是这样说的: Immutable data encourages pure ...

  5. immutable.js 在React、Redux中的实践以及常用API简介

    immutable.js 在React.Redux中的实践以及常用API简介 学习下 这个immutable Data 是什么鬼,有什么优点,好处等等 mark :  https://yq.aliyu ...

  6. 来自 Vue 3.0 的 Composition API 尝鲜

    来自 Vue 3.0 的 Composition API 尝鲜:https://segmentfault.com/a/1190000020205747

  7. java基础3.0:Java常用API

    本篇介绍Java基础中常用API使用,当然只是简单介绍,围绕重要知识点引入,巩固开发知识,深入了解每个API的使用,查看JavaAPI文档是必不可少的. 一.java.lang包下的API Java常 ...

  8. Vue 2.0 学习路线

    「 Vue很难学吗 」 对于我这种从0.x版本就开始体验 vuejs 的人来说,当然不算难,那时候没各种脚手架和复杂搭配,仅仅是一个mvvm的解决方案库而已,解决了jq带来的繁琐操作dom痛点,所以就 ...

  9. 新手入门指导:Vue 2.0 的建议学习顺序

    起步 1. 扎实的 JavaScript / HTML / CSS 基本功.这是前置条件. 2. 通读官方教程 (guide) 的基础篇.不要用任何构建工具,就只用最简单的 <script> ...

  10. vue 2.0 开发实践总结之疑难篇

    续上一篇文章:vue2.0 开发实践总结之入门篇 ,如果没有看过的可以移步看一下. 本篇文章目录如下: 1.  vue 组件的说明和使用 2.  vuex在实际开发中的使用 3.  开发实践总结 1. ...

随机推荐

  1. LFS(Linux From Scratch)构建过程全记录(二):磁盘分区

    写在前面 本文将会详细记录LFS中,构建分区,构建文件系统和挂载分区的全过程 准备新硬盘 为了更加符合"从零开始构建Linux"的要求,我在虚拟机中,新建了一个磁盘 我们将会在这个 ...

  2. Reactor And Gev 详解 通俗易懂

    reactor 详解 在类似网关这种海量连接, 很高的并发的场景, 比如有 10W+ 连接, go 开始变得吃力. 因为频繁的 goroutine 调度和 gc 导致程序性能很差. 这个时候我们可以考 ...

  3. 微信小程序-全局配置、组件、页面跳转、用户信息等

    全局配置 三个页面 app.json pages字段 "pages":[ "pages/index/index", # 首页 "pages/home/ ...

  4. Helm包管理

    Helm Kubernetes 包管理工具 Helm 可以帮助我们管理 Kubernetes 应用程序 - Helm Charts 可以定义.安装和升级复杂的 Kubernetes 应用程序,Char ...

  5. Filebeat Processors对日志数据应用基本处理和数据增强功能

    下面是一个使用drop_fields处理器从Apache访问日志中删除一些字段的示例: filebeat.inputs: - type: log enabled: true fields: apach ...

  6. Elasticsearch:如何实现对 emoji 表情符号进行搜索

    转摘自:https://elasticstack.blog.csdn.net/article/details/114261636 Elasticsearch 是一个应用非常广泛的搜索引擎.它可以对文字 ...

  7. 《Spatial-Spectral T ransformer for Hyperspectral Image Classification》论文笔记

    论文题目<Spatial-Spectral T ransformer for Hyperspectral Image Classification> 论文作者:Xin He 1 , Yus ...

  8. Vue子->父组件传值

    父组件引入: Import Test from'' 父页面使用: <Test ref="test" @m1="m2"><Test/> 子 ...

  9. C++面向对象编程之C++11语法糖

    1.variadic template(模板参数可变化) template... type就是说有可变模板参数,作为参数使用时类型就是 类型后 + ... ,例如type... / type& ...

  10. HDU3507 print article (斜率优化DP)

    状态表示:dp[i]表示打印前i个单词的最小成本:s[i]维护前缀和. 状态转移:dp[i]=min(dp[j]+(s[i]-s[j])2)+m , 0<=j<i. 换成y=kx+b的形式 ...