首页 > 其他分享 >前端学习-vue视频学习015-其他API

前端学习-vue视频学习015-其他API

时间:2024-04-10 23:57:37浏览次数:23  
标签:function vue car person API let 015 import

尚硅谷视频教程

shallowRef shallowReactive

  • 浅层次的响应式数据(仅第一层)
  • shallowRef :只能整体修改 person.value可以修改,但是person.value.name无法修改
  • shallowReactive :只能修改对象的第一层数据 car.brand可以修改,但是car.options.color无法修改
  • 主要用处在于:如果数据量非常大的时候,所有数据都要保持响应式会性能不好
<template>
    <h3>{{ person }}</h3>
    <button @click="changeName">changeName</button>
    <button @click="changePerson">changePerson</button>
    <h3>{{ car }}</h3>
    <button @click="changeBrand">changeBrand</button>
    <button @click="changeColor">changeColor</button>

</template>

<script setup name="App" lang="ts">
import { ref,reactive } from 'vue';
import { shallowRef,shallowReactive } from 'vue';

let person = shallowRef({
    name:'aaa',
    age:18
})

function changeName(){
    person.value.name = 'vvvvvvvvvv'
}
function changePerson(){
    person.value = {name:'eeeeeeee',age:99}
}

let car = shallowReactive({
    brand:'car',
    options:{
        color:'red'
    }
})

function changeBrand(){
    car.brand = 'vvvvvvvvvv'
}
function changeColor(){
    car.options.color = 'blue'
}
</script>

readonly,shallowReadonly

  • readonly 创建只读的对象快照
  • shallowReadonly 仅第一层只读,更深层次的数据可以修改
<template>
    <h3>{{ copyPerson }}</h3>
    <button @click="changeName">changeName</button>
    <button @click="changePerson">changePerson</button>
    <h3>{{ car }}</h3>
    <button @click="changeBrand">changeBrand</button>
    <button @click="changeColor">changeColor</button>

</template>

<script setup name="App" lang="ts">
import { ref,reactive } from 'vue';
// import { shallowRef,shallowReactive } from 'vue';
import { readonly,shallowReadonly } from 'vue';

let person = ref({
    name:'aaa',
    age:18
})
let copyPerson = readonly(person)

function changeName(){
    copyPerson.value.name = 'vvvvvvvvvv' // 不能修改
}
function changePerson(){
    copyPerson.value = {name:'eeeeeeee',age:99} // 不能修改
}

let car = reactive({
    brand:'car',
    options:{
        color:'red'
    }
})
let copyCar = shallowReadonly(car)

function changeBrand(){
    copyCar.brand = 'vvvvvvvvvv' // 不能修改
}
function changeColor(){
    copyCar.options.color = 'blue' // 能修改
}
</script>

toRaw,markRaw

  • toRaw: 可以将reactive定义的响应式数据变为普通对象,用于要将响应式对象传给非vue的库或者其他系统时
  • markRaw:标记为非响应式,防止被改;如mockjs
<template>
    <h3>{{ rawPerson }}</h3>
    <button @click="changeName">changeName</button>
    <button @click="changePerson">changePerson</button>
    <h3>{{ rawCar }}</h3>
    <button @click="changeBrand">changeBrand</button>
    <button @click="changeColor">changeColor</button>

</template>

<script setup name="App" lang="ts">
import { ref,reactive } from 'vue';
// import { shallowRef,shallowReactive } from 'vue';
// import { readonly,shallowReadonly } from 'vue';
import { toRaw,markRaw } from 'vue';

let person = {
    name:'aaa',
    age:18
}
// let rawPerson = ref(person)
let rawPerson = markRaw(person)
console.log(person);
console.log(rawPerson);


function changeName(){
    rawPerson.value.name = 'vvvvvvvvvv'
}
function changePerson(){
    rawPerson.value = {name:'eeeeeeee',age:99}
}

let car = reactive({
    brand:'car',
    options:{
        color:'red'
    }
})
let rawCar = toRaw(car)
console.log(car);
console.log(rawCar);


function changeBrand(){
    rawCar.brand = 'vvvvvvvvvv'
}
function changeColor(){
    rawCar.options.color = 'blue'
}
</script>

customRef自定义ref

  • 重点在:track监视数据的变化,trigger通知vue数据已经变化了
  • get在数据被读取时调用,set在数据被修改时调用
  • 可以使用hooks的知识封装方法(需要return)
// App.vue
<template>
    <h3>msg {{ msg }}</h3>
    <input type="text" v-model="msg">
    <h3>customMsg {{ customMsg }}</h3>
    <input type="text" v-model="customMsg">
</template>

<script setup name="App" lang="ts">
import { ref,customRef } from 'vue';
import useMsgRef from './useMsgRef'

let msg = ref('111')
let {customMsg} = useMsgRef('ssssss',2000)

</script>
// useMsgRef.vue
import { ref,customRef } from 'vue';

export default function(initMsg,delay){
    let timer:number
    let customMsg = customRef((track,trigger)=>{
        return {
            // 数据被读取时调用
            get() {
                // 监视数据的变化
                track()
                return initMsg
            },
            // 数据被修改时调用
            set(value) {
                clearInterval(timer)
                timer = setTimeout(()=>{
                    initMsg = value
                    // 通知vue数据已经变化了
                    trigger()
                },delay)
            }
        }
    })
    return {customMsg}
}

标签:function,vue,car,person,API,let,015,import
From: https://www.cnblogs.com/ayubene/p/18127584

相关文章

  • 小程序 Api promise 化
      工具-构建npm-miniprogram_npm下出现miniprogram-api-promise即可正常使用 使用方法:如果提示没有找到miniprogram-api-promise,可以清除缓存重新编译试一下  ......
  • 基于SpringBoot+Vue的4S店车辆管理系统(源码+文档+部署+讲解)
    一.系统概述随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代,4S店车辆系统就是信息时代变革中的产物之一。任何系统都要遵循系......
  • 前后端分离开发和接口文档管理平台YAPI以及前端工程化(Vue-cli)
    前后端分离开发和接口文档管理平台YAPI以及前端工程化(Vue-cli)前后端分离开发需求分析=>接口定义(API接口文档)=>前后端并行开发(遵守规范)=>测试(前端、后端)=>前后端联调测试YApi1.介绍:YApi是高效、易用、功能强大的api管理平台,旨在为开发、产品、测试人员提供更优雅的接口管理服......
  • 前端学习-vue视频学习014-组件通信
    尚硅谷视频教程通信方式1propsparent传child--只能传递非函数//Parent.vue<template><divclass="parent"><h3>parent</h3> <h3>car:{{car}}</h3> <Child:car="car"/></div></templat......
  • 前端开发之el-table(vue2中)固定列fixed滚动条被固定列盖住
    固定列fixed滚动条被固定列盖住效果图前言解决方案效果图前言在使用fixed固定列的时候会出现滚动条被盖住的情况解决方案改变el-table固定列的计算高度即可.el-table{.el-table__fixed-right,.el-table__fixed{height:auto!important;......
  • java中常用的API-Runtime
    Runtime表示当前虚拟机的运行环境Runtime类是Java运行时的表示。每个Java应用程序都有一个与之关联的Runtime实例,它允许应用程序与其运行的环境进行交互。你可以使用Runtime类来获取关于JVM(Java虚拟机)的信息,以及执行一些特定的运行时操作 使用 Runtime 类来获取和打......
  • 实验一-密码引擎-3-加密API研究
    任务详情密码引擎API的主要标准和规范包括:1微软的CryptoAPI2RAS公司的PKCS#11标准3中国商用密码标准:GMT0016-2012智能密码钥匙密码应用接口规范,GMT0018-2012密码设备应用接口规范等研究以上API接口,总结他们的异同,并以龙脉GM3000Key为例,写出调用不同接口的代码,提交博客......
  • Vue3+Spring Boot3实现跨域通信解决办法
    Vue3+SpringBoot3实现跨域通信解决办法1跨域是什么?2何为同源呢?3解决办法3.1全局配置3.1.1实现CorsFilter过滤器3.1.2实现SpringMVC配置类3.1.3创建CorsFilterFactory工厂类返回CorsFilter对象3.2局部跨域3.2.1注解配置3.2.2手动设置响应头(局部跨域)1......
  • 实验一-密码引擎-3-加密API研究
    一、任务详情密码引擎API的主要标准和规范包括:1微软的CryptoAPI2RAS公司的PKCS#11标准3中国商用密码标准:GMT0016-2012智能密码钥匙密码应用接口规范,GMT0018-2012密码设备应用接口规范等研究以上API接口,总结他们的异同,并以龙脉GM3000Key为例,写出调用不同接口的代码,提交......
  • Java8 Stream API全面解析——高效流式编程的秘诀
    文章目录什么是StreamApi?快速入门流的操作创建流中间操作filter过滤map数据转换flatMap合并流distinct去重sorted排序limit限流skip跳过peek操作终结操作forEach遍历forEachOrdered有序遍历count统计数量min最小值max最大值reduce聚合collect收集anyM......