前端小白学习Vue3框架(一)

本文介绍了Vue3的关键改进,包括性能优化、响应式原理的变化(从Object.defineProperty到Proxy),以及如何使用setup和ref创建响应式数据。还涵盖了生命周期钩子在Vue3中的应用实例。
摘要由CSDN通过智能技术生成

一. Vue3是什么?

Vue 3是Vue.js的最新版本,相对于Vue 2,Vue 3在性能、开发体验和组件化等方面有了显著提升。在性能方面,Vue 3进行了大量优化,包括虚拟DOM、Diff算法和Reactive API等

二.区别vue2以及vue3响应式原理

<!-- vue@2 响应式原理  只能针对对象观察变化 -->
<script>
let  data={}
// 如果在此定义了message,不能通过this去使用,否则会出现死循环
// 定义变量 (储存器变量)
let _message = ''
// 在vue2里面放的是属性
Object.defineProperty(data,'message',{
  set(value){
    console.log('1.0观察数据修改了');
    _message=value
    // 也可以写成这种情况
    this._message=value
   
    // 不能这样写,会死循环
    // this.message=value
  },
  get(){
    console.log('2.0观察数据读取了');
    return this._message
  }
})



// 在vue@3中放置的是对象
let obj={}
let pobj=new Proxy(obj,{
  set(target,key,value){
    console.log('1.0观察修改');
   if(key == 'color'){
    return false
   }
   target[key]=value
  },
  get(target,key){
    console.log('2.0观察读取');
   return target[key];
  }
})
// 修改的是响应式对象
pobj.color='#ff5500'
pobj.width=1000
pobj.height=500
console.log(pobj);
console.log(obj);

三.学习vue3知识点

1.先创建一个vue3项目来学习吧!

跟先前学习vue2一样也是通过vue-cli创建vue3项目,通过vue ui 或者vue create 项目名创建

只不过在功能上选择时要有所不同咯

 babel  ts  router  css linter  功能

 less  linter      设置公共路径  ./

在vscode代码编辑器里下载vue3插件(也要把vue2的禁用噢)

2.vue3语法的写法种类

写法1:setup 作初始化,通过export default以及ref来创建响应式数据的方法,需要retrun 数据才能在template(组合式+选项式)

中使用该响应式数据

写法2:写成vue2的语法形式,引入组件 ,通过data,reutrn 数据属性(选项式)

写法3(推荐):引入ref创建响应式数据,通过setup做初始化,直接通过ref创建响应式数据,通过value修改(组合式)

<template>
  <div>
    <div class="home">
    <h2>首页</h2>
    <!-- <img alt="Vue logo" src="../assets/logo.png"> -->
     <h3>{{message}}</h3>
  </div>
  </div>
</template>

<!-- 写法1 -->
<script lang="ts">
import { defineComponent ,ref} from 'vue';
// ref 创建响应式数据的方法
export default defineComponent({
  // setup表示初始化
  setup(){
     let message=ref('hello world')
    //  返回相应式数据
     return {
      message
     }
  }
})
</script>

<!-- 写法2 选项式加组合式-->
<script lang="ts">
// 导入defineComponent函数
import { defineComponent } from 'vue';
//定义组件
export default defineComponent({
  name: 'HomeView',
  data(){
    return {
      message:'hello Vue'
    }
  }

});
</script>

<!-- 写法3   setup写在script里面 -->
<!-- 组合式 -->
<script lang="ts" setup>
import { ref} from 'vue';
// ref 创建响应式数据的方法
let message=ref('hello today')
// message 是一个相应式对象
console.log(message);

// 修改赋值通过value修改
message.value='你好啊兄弟'

</script>

3.侦听器、属性计算、过滤器

在vue3中,需要用到什么就把需要用到的功能引入进来

// 导入api,创建响应式数据的方法
import {ref,watch, computed} from "vue"

// 定义数据,此处写法无响应式
// let user_name='aaa'
// 定义数据写变量
// 这样的是有响应的,要通过ref去创建响应式数据
let user_name =ref("admin")

属性侦听 

//侦听器
//1.引入侦听器
import {ref,watch} from "vue"
//2创建响应式数据
let user_name =ref("admin")
//3.侦听改变
watch(user_name,(n,o)=>{
    
   console.log(n,o)

},{

deep:true,//深度侦听
immediate:true,//立即侦听
}


)

 属性计算

<template>

<div>
  <input v-model="fisrt_name" type="text" placeholder="姓">+
      <input v-model="last_name" type="text" placeholder="名">=
      <span>{{ full_name }}</span>

</div>
</template>


<script  lang="ts" setup>
//引入
import {ref,computed} from 'vue'
//通过ref创建响应式数据
let first_name=ref("");
let last_name=ref("大锤");

//通过value获取值

let full_name=computed()=>{

return first_name.value+last_name.value
}


</script>

过滤器

//在vue3中没有过滤器,改用工具函数代替
<template>

 <div>
      <p>{{ datetime }}</p>
      <p>{{ formatime(datetime) }}</p>
 </div>
</template>



<script>
import {ref} from "vue"
let date=new Date()
let datetime=ref("")
datetime.value=date.toString()


//vue3中没有过滤器,使用工具函数

const formatime=(datetimestr:string)=>{
    let dt=new Date(datetimerstr);
    return dt.toLocaleDateString()+ " " +(dt.toLocaleTimeString())



}

</script>

4.生命周期及钩子函数

-->创建阶段beforeCreate  created ---->挂载阶段  beforeMount mounted --->更新阶段  beforeupdate updated -->销毁阶段 beforeUnmount unmounted(改变)

//在挂载阶段操作dom做canvas
<template>
  <div>
    <p>绘画</p>
    <p>{{ res }}</p>
    <div>
      <canvas ref="pcanvas"></canvas>
    </div>
  </div>
</template>

<script  lang="ts" setup>
import {ref,onMounted} from 'vue'
const pcanvas=ref()
onMounted(()=>{
const canvas=pcanvas.value
if(canvas){
   canvas.width=600;
   canvas.height=800;
   const pen=canvas.getContext("2d")
   pen.beginPath();
   pen.fillStyle="red"
   pen.fillRect(0,0,600,100)


}

})


</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值