IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Vue3 学习笔记--组合式 API -> 正文阅读

[JavaScript知识库]Vue3 学习笔记--组合式 API

先来介绍一下 Mixin

1、Mixin

Mixin 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能

一个 mixin 对象可以包含任意组件选项

当组件使用 mixin 对象时,所有 mixin 对象的选项将被?混合?进入该组件本身的选项

// define a mixin object
const myMixin = {
  created() {
    this.hello()
  },
  methods: {
    hello() {
      console.log('hello from mixin!')
    }
  }
}

// define an app that uses this mixin
const app = Vue.createApp({
  mixins: [myMixin]
})

app.mount('#mixins-basic') // => "hello from mixin!"

1.1 合并规则

data 函数

?钩子函数

值为对象的选项,例如 methods、components

1.2 全局 mixin

一旦使用全局 mixin,它将影响每一个之后创建的组件

const app = Vue.createApp({
  myOption: 'hello!'
})

// 为自定义的选项 'myOption' 注入一个处理器
app.mixin({
  created() {
    const myOption = this.$options.myOption
    if (myOption) {
      console.log(myOption)
    }
  }
})

app.mount('#mixins-global') // => "hello!"

和 mixin 有些类似的是 extends


2、组合式 API

先来说说 Options API

Options API 的特点是在对应的属性中编写对应的功能模块

比如:在 methods 中定义方法,在 computed 中定义计算属性

缺点是:

实现某一个功能时,该功能对应的代码逻辑会被?拆分?到各个属性中

然而,当我们的组件变得更大、更复杂的时候,我们需要实现的功能也就越多

每一个功能对应的代码逻辑都被拆的很分散,代码碎片化

这是?不方便?我们的去?理解和维护?这个组件的

因此,在 Vue 组件中,我们可以在 setup 中使用组合式 API,来解决上述问题

注意:在 setup 中,我们应该避免使用 this

2.1 setup 组件选项

使用 setup 函数时,它将接受两个参数:

  1. props
  2. context

2.1.1 Props

对于 props 的相关内容,跟之前讲述的是一样的

// MyBook.vue

export default {
  props: {
    title: String
  },
  setup(props) {
    console.log(props.title)
  }
}

2.1.2 Context

里面包含三个属性:

  • attrs
  • slots
  • emit

?2.1.3 结合模板使用


3、响应性?API

包含以下部分:

  • 响应性基础 API
  • refs
  • computed 与 watch

3.1 响应性基础 API

3.1.1 reactive

用法如下:

const obj = reactive({ count: 0 })

返回对象的响应式副本

响应式转换是深层的

注意:reactive 对传入的类型是有限制的,它要求我们必须传入的是 一个对象或者数组类型

那如果我们想传入基本数据类型的时候怎么办?

Vue3 给我们提供了另外一个 API:ref,稍后我们会对其进行讲解

3.1.2 readonly

接受一个对象或 ref 并返回原始对象的只读代理(也就是说它依然是一个 proxy

只读代理是深层的:任何被访问的嵌套 property 也是只读的

在实际开发中,传入 readonly 的参数有三种类型:

  1. 普通对象
  2. reactive 返回的对象
  3. ref 对象

用法如下:

一般我们什么时候会用到 readonly 呢?

我们给其它组件传递数据,希望它们使用我们传递过去的数据

但是不允许它们修改的时候

3.1.3 isProxy

检查对象是否由 reactivereadonly 创建的 proxy

3.1.4 isReactive

检查对象是否由 reactive 创建的响应式代理

用法如下:

import { reactive, isReactive } from 'vue'
export default {
  setup() {
    const state = reactive({
      name: 'John'
    })
    console.log(isReactive(state)) // -> true
  }
}

注意:如果该代理是 readonly 创建的,但包裹了由 reactive 创建的另一个代理,它也会返回 true

3.1.5 isReadonly

检查对象是否由 readonly 创建的只读代理

3.1.6 toRaw

返回 reactivereadonly 代理的原始对象

3.1.7 shallowReactive

创建一个响应式代理,它跟踪其自身 property 的响应性,但不执行嵌套对象的深层响应式转换

3.1.8 shallowReadonly

创建一个 proxy,使其自身的 property 为只读,但不执行嵌套对象的深度只读转换 (暴露原始值)

3.2 Refs

3.2.1 ref

接受一个内部值并返回一个响应式且可变的 ref 对象

ref 对象具有指向内部值的单个 property?.value

这里有两个注意事项:

  1. 在?模板中引入 ref 的值?时,Vue 会自动帮我们进行?解包操作,所以我们?不需要?在模板中通过 ref.value 的方式来使用
  2. setup 函数内部,它任然是一个 ref 引用,所以对其进行操作时,我们依然需要?使用 ref.value 的方式

如果将 ref 放到一个 reactive 的属性中,那么在模板中使用时会自动解包?


4、Computed 和 watch

4.1 computed

接受一个 getter 函数,并为从 getter 返回的值返回一个?不变的?响应式 ref 对象

使用具有 get 和 set 函数的对象来创建?可写?的 ref 对象

4.2 watchEffect

在响应式地跟踪其依赖项时?立即运行?一个函数,并在?更改?依赖项时?重新运行?

const count = ref(0)

watchEffect(() => console.log(count.value))
// -> logs 0

setTimeout(() => {
  count.value++
  // -> logs 1
}, 100)

?4.2.1 停止监听

4.2.2?清除副作用

有时副作用函数会执行一些异步的副作用,这些响应需要在其失效时清除

待更...

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-12 16:30:39  更:2021-08-12 16:31:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 9:19:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码