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知识库 -> 浅学Vue3Day3 一些Composition api、Teleport、Suspense、全局api的转移 -> 正文阅读

[JavaScript知识库]浅学Vue3Day3 一些Composition api、Teleport、Suspense、全局api的转移


shallowReactive 和 shallowRef

  • shallowReactive: 只处理对象最外层属性的响应式(浅响应式)
  • shallowRef: 只处理基本数据类型的响应式,不进行对象的响应式处理
  • 什么时候使用?
    • 如果有一个对象数据,结构比较深,但变化时只是外层属性变化 => shallowReactive
    • 如果有一个对象数据,后续功能不会修改该对象中的属性,而是生新的对象来替换 => shallowRef

readonly 和 shallowReadonly

  • readonly:让一个响应式数据变为只读的(深只读)
  • shallowReadonly: 让一个响应式数据变为只读的(浅只读)
  • 应用场景:不希望数据被修改时

toRaw 和 markRaw

  • toRaw
    • 作用:将一个由reactive生成的响应式对象转为普通对象
    • 使用场景:用于读取响应式对象对应的普通对象,对这个普通对象的所有操作,不会引起页面更新
  • markRaw
    • 作用:标记一个对象,使其永远不会再成为响应式对象
    • 应用场景:
      • 有些值不应该被设置为响应式的,比如复杂的第三方类库等
      • 当渲染具有不可变数据源的大列表时,跳过响应式转换可以提高性能

customRef

  • 作用:创建一个自定义的ref,并对其依赖项跟踪和更新触发进行显式控制
  • 实现一个输入框输入内容在页面同步显示小样例:
<template>
  <input type="text" v-model="keyword">
  <h3>{{keyword}}</h3>
</template>
<script>
  import { ref, customRef} from 'vue'
  export default {
    setup() {
      // 自定义一个myRef
      function myRef(value) {
        let timer
        return customRef((track,trigger) => {
          // customRef接收一个函数为参数,需要return出去一个getter和setter
          return {
            get() {
              track();  // 这个value值是需要被追踪的,这里不写的话之后更改value页面也不会同步改变
              return value;
            },
            set(newValue) {
              value = newValue;
              trigger();	// 通知vue去重新解析模版
            }
          }
        })
      }
      let keyword = myRef('hello');
      return {
        keyword
      }
    }
  }
</script>

provide 和 inject

请添加图片描述

  • 作用:实现祖孙组件间通信
  • 祖组件有一个provide选项来提供数据,孙组件有一个inject选项来开始使用这些数据(父子组件也可以用,但是没必要)
  • 具体写法:
  1. 祖组件中:
 setup() {
   ......
   let person = reactive({name:'AIpoem',age: 19});
   provide('p',person);
 }
  1. 孙组件中:
setup() {
   ......
  let person = inject('p');
  return {person};
}

新组件

Fragment

  • 在vue2中:组件必须有一个根标签
  • 在vue3中:组件可以没有根标签,内部会将多个标签包含在一个Fragment虚拟元素中
  • 好处:减少标签层级,减少内存占用

Teleport

  • 作用:能将我们的组件的html结构移动到指定位置
  • 例:下面是一段实现弹窗的代码,如果这段代码放在某个层次较深的组件中,但是弹窗希望相对body定位,就可以像下面这样写
  <teleport to="body"> <!--这里的to后接指定位置-->
    <div v-if="isShow" class="mask">
      <div class="dialog">
        <h3>我是一个弹窗/h3>
        <button @click="isShow = false">关闭弹窗</button>
      </div>
    </div>
  </teleport>

Suspense

  • 作用:等待异步组件时渲染一些额外的内容,有更好的用户体验
  • Suspense是一个试验性的新特性,其api可能随时会发生变动。生产环境请勿使用。
  • 使用步骤:
  1. 异步引入组件
import {defineAsyncComponent} from 'vue'
const Child = defineAsyncComponent(() => import('./components/Child.vue'))
  1. 使用Suspense包裹组件,并配置好defaultfallback
<template>
  <div class="app">
    <h3>我是App组件</h3>
    <Suspense>
      <template #default>
        <child></child>     
      </template>
      <template #fallback>
        <h3>加载中...</h3>  // 异步组件未渲染出来时显示的内容
      </template>
    </Suspense>
  </div>
</template>

全局api的转移

vue3.0将全局的api,即Vue.xxx调整到应用实例(app)上

2.x全局API3.0实例API
Vue.config.xxxxVue.config.xxxx
Vue.config.productionTip移除
Vue.componentapp.component
Vue.directiveapp.directive
Vue.mixinapp.mixin
Vue.useapp.use
Vue.prototypeapp.config.globalProperties

其他改变

  • 移除keyCode作为v-on的修饰符
  • 移除v-on.native修饰符
    • 在父组件中绑定事件
    <my-component
      v-on:close="handleComponentEvent"
      v-on:click="handleNativeClickEvent"
    />
    
    • 子组件中声明自定义事件
    <script>
      export default {
        emits: ['close']  // 声明了的就是自定义事件,没指定的click事件就是原生事件
      }
    </script>
    

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-25 10:29:45  更:2022-01-25 10:31:54 
 
开发: 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/24 13:29:57-

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