首页 > 其他分享 >Vue3学习笔记(1)

Vue3学习笔记(1)

时间:2023-02-25 18:22:32浏览次数:50  
标签:return 对象 value 学习 num let 笔记 Vue3 ref

安装

   //使用yarn构建
   //安装yarn  需要管理员权限  
   sudo npm i yarn -g  
   yarn create vite
   cd ..
   yarn 
   yarn dev

目录结构

    见名知义

四种语法范式

vue3中可以不需要根标签

  1. 选项式写法, vue2写法 , Vue3兼容vue2选项式写法,不推荐 选项写法都有组合API实现
  2. 组合式写法, 只使用setup ,相当于vue2中的created(),setup可以理解成是组件生命周期的第一阶段,
<template>
在模版中使用ref响应数据时 不需要.value取值
</template>
<script>
impprt {ref} from 'vue'
export default(
    //组合式写法入口
    setup(){
        let msg = ref('hello') //num叫ref变量 ref对象
        console.log(msg.value) // 在js中操作需要.value才能取到响应数据值
        return {num} // setup中定义了响应式数据,要在模版中使用, 必须return出去
    }
)
<script>   
  1. 选项式+组合式 不推荐
  2. 组合式语法糖写法 推荐
   <script setup lang="ts">
    import { ref } from 'vue';
    let num = ref(100)
    let add = ()=>{
    num.value++
    }
    </script>

    <template>
    <h1>组合式语法糖写法</h1>
    <h1 v-text="num"></h1>
    <button @click="add">+++</button>
    </template>

    <style scoped>
    </style>

hooks

抽离业务逻辑代码到单独的hook文件  定义一个函数 并return所有数据和方法 最后exprot出去,在组件中通过import 导入 ,调用该函数声明一个对象来接收所有数据和方法
//Surga.vue

    import useCount from './hooks/useCount.ts'
  
    let {num, add, sub} = useCount()
//useCount.ts

    import { ref, reactive } from 'vue';
    function useCount() {
        let num = ref(100)
        let add = () => {
            num.value++
        }
        let sub = () => {
            num.value--
        }
        return{
            num,
            add,
            sub
        }
    }
    export default useCount

setup用法

    //定义在script标签上  不用return返回  语法糖
    <script setup>
    //dosomething...
    </script>


    //定义在script 内部  需要return返回
    <script>
        exprot default({
            setup(){
                const a = ''
                const fun = ()=>{}
                return {a,fun}
            }
        })
    </script>

响应式 ref

  1. ref操作基本数据类型(string,number,boolean)
  2. isRef 判断一个数据是否为ref对象 isRef(xxx) //返回true/false
  3. unRef 如果传递一个ref对象,得到ref对象的value值;如果传递一个非ref对象,得到数据本身
  4. customRef 自定义ref
        <script setup >

        import {ref,customRef,onRenderTracked,onRenderTriggered} from 'vue'
        let num = ref(100)
        let add = ()=>{num.value++}
        let sub = ()=>{num.value--}
        //自定义customRef
        let name = customRef((track,trigger)=>{
        let value = ''
        return{
            // 使用name时,调用get
            get(){
            track() //当name被使用时,执行track(),调用onRenderTracked
            return value
            },
            set(val){
            trigger() //当name被修改时,执行trigger(),调用onRenderTriggered
            value = val
            }
        }
        })
        //仅供在开发环境下,用于ref的变量调试
        onRenderTracked((ev)=>console.log('name被访问了',ev))
        onRenderTriggered((ev)=>console.log('name值被修改了',ev))
        </script>

        <template>
        <h1>组合式API</h1>
        <h1 v-text="num"></h1>
        <button @click="add">+++</button>
        <button @click="sub">---</button>
        <input type="text" v-model="name">
        
        </template>
  1. toRef 可以把reactive对象中的某个属性变成ref对象
// toRef  可以把reactive对象中的某个属性变成ref对象
let nameToRef = toRef(user,'nickName')  //nameToRef变成了一个ref对象, 该方法接收两个params, 对象  -  属性 
  1. shallowRef 和 ref() 不同,浅层 ref 的内部值将会原样存储和暴露,并且不会被深层递归地转为响应式。只有对 .value 的访问是响应式的。
  2. triggerRef()
    强制触发依赖于一个浅层 ref 的副作用,这通常在对浅引用的内部值进行深度变更后使用。
  3. reactive isReactive(检查一个对象是否是由 reactive() 或 shallowReactive() 创建的代理。)
  4. readonly isReadonly (只读对象的属性可以更改,但他们不能通过传入的对象直接赋值。)
  5. isProxy 检查一个对象是否是由 reactive()、readonly()、shallowReactive() 或 shallowReadonly() 创建的代理。
  6. toRaw 变为原始对象
  7. markRaw 标记为原始对象
  8. shallowReactive shallowReadonly
  9. computed
  10. watch
  11. watchEffect
    1. watchEffect //{flush:'pre'} 最先执行
    2. watchPostEffect //{flush:'post'} 最后
    3. watchSyncEffect //{flush:'sync'} 按顺序同步执行,如果在pre前就先执行

生命周期 钩子函数

vue2中有8个周期
  1. beforeCreate created 被setUp代替
  2. 在vue3中生命周期都是组合式API 都是以on开头
  3. 在v2中有beforeDestory/destroyed 在v3中onBeforeUnmount / onUnmounted
  4. 新增两个钩子函数 onRenderTracked/onRenderTriggered

onBeforeMount


defineProps 用法


defineEmits用法

标签:return,对象,value,学习,num,let,笔记,Vue3,ref
From: https://www.cnblogs.com/whokillbill/p/vue3xue-xi-bi-ji.html

相关文章

  • SpringCloud 源码学习笔记2——Feign声明式http客户端源码分析
    系列文章目录和关于我一丶Feign是什么Feign是一种声明式、模板化的HTTP客户端。在SpringCloud中使用Feign,可以做到使用HTTP请求访问远程服务,就像调用本地方法一一样的......
  • 【Redis 系列】redis 学习九,Redis 的发布和订阅是咋玩的
    Redis发布订阅Redis发布订阅(pub/sub)是一种消息通信模式发送者发送消息pub接受者订阅消息sub例如微信,微博这样的关注系统Redis的客户端可以订阅任意数量的频......
  • 深入理解JVM学习笔记
    Java虚拟机内存区域:[2.2]运行时数据区域:1.程序计数器2.Java虚拟机栈3.本地方法栈4.Java堆5.方法区6.运行时常量池7.直接内存[2.3.1]对象的创建在虚拟机中,当......
  • Jetpack Compose学习(11)——Navigation页面导航的使用
    原文:JetpackCompose学习(11)——Navigation页面导航的使用-Stars-One的杂货小窝在Android原生的View开发中的,也是有Navigation,原生我之后可能再出篇教程,今天讲解......
  • C#初步学习1(个人笔记,基于老赵.Net的视频自学,不喜勿喷)
    //此笔记仅针对个人学习而写,会有所缺失的内容,不喜勿喷初步学习创建文件这里使用VisualStudio编写C#代码安装其中一个运行平台,创建新项目至于名字那就起每一个码农的......
  • 后缀数组做题笔记
    后缀数组笔记这里挂一个学弟学习笔记的链接:Link,大部分内容都学习自这里。按道理这篇文章会持续更新1.Preface​ 首先有几个概念需要明确。本文中所有字符串下标从\(1......
  • 【学习笔记】SpringMVC执行原理
    SpringMVC执行原理执行步骤每一步的解释如下:DispatcherServlet表示前端控制器,是整个SpringMVC的控制中心,用户发出请求,DispatcherServlet接受请求并拦截请求请求的......
  • OpenCvSharp 学习笔记1 -- 基本对象和常见操作
    一:Mat对象的创建OpenCvSharp版本:v4.0.30319mat对象继承了IDisposable接口,可以直接用using语句。mat对象的构造函数有十几个之多,我这里之列举常用的几个。Mat在C......
  • Codeforces Edu 143 补题笔记
    [A.TwoTowers](Problem-A-Codeforces)Def给出长为n,m的两个01栈,可以将栈顶的元素移往另一个栈顶,问是否可以使得两个栈中元素均为01交替Sol因为是栈顶,可以知道......
  • python笔记--在文件进行输出
    将print的内容输出到文件中1#将数据输出到文件中2fp=open('E:/text1.txt','a+')3print('helloword',file=fp)4fp.close()  1#不进行换行输出(在一行输出......