安装

   //使用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用法

Vue3学习笔记(1)的更多相关文章

  1. vue3 学习笔记 (二)——axios 的使用有变化吗?

    本篇文章主要目的就是想告诉我身边,正在学 vue3 或者 准备学 vue3 的同学,vue3中网络请求axios该如何使用,防止接触了一点点 vue3 的同学会有个疑问?生命周期.router .vu ...

  2. vue3 学习笔记 (四)——vue3 setup() 高级用法

    本篇文章干货较多,建议收藏! 从 vue2 升级到 vue3,vue3 是可以兼容 vue2 的,所以 vue3 可以采用 vue2 的选项式API.由于选项式API一个变量存在于多处,如果出现问题时 ...

  3. vue3 学习笔记(九)——script setup 语法糖用了才知道有多爽

    刚开始使用 script setup 语法糖的时候,编辑器会提示这是一个实验属性,要使用的话,需要固定 vue 版本. 在 6 月底,该提案被正式定稿,在 v3.1.3 的版本上,继续使用但仍会有实验 ...

  4. vue3 学习笔记 (五)——vue3 的 setup 如何实现响应式功能?

    setup 是用来写组合式 api ,内部的数据和方法需要通过 return 之后,模板才能使用.在之前 vue2 中,data 返回的数据,可以直接进行双向绑定使用,如果我们把 setup 中数据类 ...

  5. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  6. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  7. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  8. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  9. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  10. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

随机推荐

  1. 修改ctags让fzf.vim插件显示C,C++方法声明的标签

    背景 在 vim 中使用 fzf.vim 插件可以进行方便的搜索文件, 源码TAG, GIT 记录等, 最近抽空看了下 BTags 命令在 c, c++ 文件中, 无法显示头文件中的函数声明 标签问题 ...

  2. 挖矿僵尸网络蠕虫病毒kdevtmpfsi处理过程

    背景: pgsql连接时候报错org.postgresql.util.PSQLException: FATAL: sorry, too many clients already, 意思是client已 ...

  3. CCRD_TOC_2007年11月_总第12期

    中信国健临床通讯 2007年11月, 总第12期 目 录   类风湿关节炎 1 MRI证实Etanercept治疗的RA患者中尽管关节炎症还在持续但是骨侵蚀进展停止 Dohn UM, et al. C ...

  4. PostgreSQL 实现快速删除一个用户

    一.具体方法 一般情况下直接执行 drop role xxx; 就可以把这个用户删除.但是很多时候会因为用户有依赖而报错. 二.权限依赖 postgres=# create role test wit ...

  5. LeetCode-1706 球会落在何处

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/where-will-the-ball-fall 题目描述 用一个大小为 m x n 的二维网格 ...

  6. 溢出标志位OF与进位标志位CF判断

    1.OF与CF概述 OF(Overflow Flag,溢出标志位):有符号数之间加减运算的溢出标志 CF(Carry Flag,进位标志位):无符号数之间加减运算的溢出标志 快速判断(加法)(减法可转 ...

  7. Java内存分析利器——Eclipse Memory Analyzer工具的使用

    一.如何下载Java程序的dump内存文件并离线导入到MemoryAnalyser工具进行分析 1.jps查看Java应用的pid   jps 11584216168084 Launcher24792 ...

  8. go+redis实现消息队列发布与订阅

    在做项目过程中,实现websocket得时候,不知道哪里写的不太合适,客户端消息收到一定程度,剩下的消息收不到,修改了缓冲区大小,还是没有解决问题,后面因为项目结束期比较紧张,没有时间调试消息的时候, ...

  9. frp使用教程

    内网穿透工具---frp使用教程 https://blog.csdn.net/u011215939/article/details/103383373

  10. MAC怎么快速截图

    ​ 1.截取全屏 按住[command][shift][3]这三个键即可截取全屏. ​ 编辑 2.截取某区域 按住[command][shift][4]. ​ 编辑 3.截图完成 在电脑桌面能找到截图 ...