Vue3 入门基本语法使用

1.ref

ref主要定义基本数据类型,不仅可以用在数据的响应式,还可以绑定DOM元素

<template>
  <div>
    {{num}}
  </div>
  <div>
    <button @click="handleChange">Num++</button>
  </div>
</template>
<script setup  lang='ts'>
import { ref } from 'vue'
let num = ref(1)
 	console.log(num); // { "__v_isShallow": false, "__v_isRef": true, "_rawValue": 1, "_value": 1 }
const changeNum = () => {
	num.value += 1 //num 数据存在vlue,修改需要修改value的值,数据显示因为vue3数据模板已结处理,直接{{num}}就能显示
}
</script>

2. reactive

reactive可以传递基础数据类型和引用数据类型,基础数据类型不会被包装成响应式数据

<template>
  <div>
    {{obj.name}} {{obj.age}}
  </div>
</template>
<script setup  lang='ts'>
import { reactive } from 'vue'
let obj = reactive({
	name: 'aa',
	age: 10,
})
console.log(obj)
//ref定义也能实现数据响应,原理也是判断转换reactive,使用ref定义相当于多加了一层对象
let obj = ref({
	name: 'aa',
	age: 10,
})
console.log(obj.value)
</script>

3.toRef、toRefs

toRef和toRefs把对象的数据进行分解和扩散,这个对象针对的是响应式对象并非是普通对象。

toRef、toRefs区别

toRef: 复制 reactive 里的单个属性并转成 ref
toRefs: 复制 reactive 里的所有属性并转成 ref

<template>
  <div>
    {{name}} {{age}}
  </div>
  <div>
    <button @click="changeName">Num++</button>
  </div>
</template>
<script setup  lang='ts'>
import { reactive, toRefs} from 'vue'
let obj = reactive({
	name: 'aa',
	age: 10,
})
console.log(obj)
let { name, age } = toRefs(obj)	
const changeName = () => {
	name.value = 'bb'// toRef、toRefs和ref同理,需要找到绑定value上的值,实现数据响应,但不同的是toRefs是延续响应,ref是创建响应
}
</script>

4. computed

<template>
  <div>
    {{name}} {{age}}
    <p> {{total}} </p>
  </div>
  <div>
    <button @click="changeTotal">Num++</button>
  </div>
</template>
<script setup  lang='ts'>
import { reactive, toRefs, computed} from 'vue'
let obj = reactive({
	name: 'aa',
	age: 10,
	arr: [2,4,6]
})
console.log(obj)
let { name, age } = toRefs(obj)	
const changeTotal = () => {
	obj.arr.push(2) //数组改变,total值响应修改
}
const total = computed(() => {
	obj.arr.reduce((pre,cur) => {
		return pre + cur
	})
})
</script>

5. watch和watchEffect,

watch写法上支持一个或者多个监听源,这些监听源必须只能是getter/effect函数(ref数据,reactive对象,或者是数组类型)

watch和watchEffect区别:

两者都可以监听 data 属性变化; watch 需要明确监听哪个属性;而 watchEffect 会根据其中的属性,自动监听其变化。

<template>
  <div>
    {{name}} {{age}}
    <p> {{total}} </p>
  </div>
  <div>
    <button @click="changeName">Num++</button>
  </div>
</template>
<script setup  lang='ts'>
import { reactive, toRefs, computed} from 'vue'
let obj = reactive({
	name: 'aa',
	age: 10,
	arr: [2,4,6]
})

let { name, age } = toRefs(obj)	
const changeName = () => {
	obj.name = 'bb'
}
watch([name,age], (nv, ov) => {
	console.log(nv, '改变后的值');
	console.log(ov, '改变前的值');
})
watchEffect(() => {
  console.log("watchEffect");
  console.log(name.value, "name");
  console.log(age.value, "age");
});


</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值