您现在的位置是:首页 >技术杂谈 >vue的setup网站首页技术杂谈
vue的setup
简介vue的setup
定义响应式变量
1、变量:
通过ref定义响应式数据变量
ref()响应式应用,返回带有value属性的对象,
将值封装在对象里,是为了保持JavaScript中数据类型的行为统一
通过toRefs(object)使结构化的数据重新获得响应式
通过ES6扩展运算符进行结构使的对象中的数据不是响应式...obj
2、引用变量:
通过reactive应用响应式引用数据类型
watch/watchEffect的使用
1、watch(侦听的响应式引用,回调函数)
2、watchEffect(回调函数),不需要制定监听的属性,自动收集依赖
watch与watchEffect的区别
1 watchEffct不需要指定监听的属性,自动手机依赖,只要在回调用应用了响应式的属性 watch监听指定的属性,可以监听多个
2 watch可以获取到新旧值,watchEffet不可以
3 watchEffect在组件初始化的时候自动执行一次,用来收集依赖,watch不需要,一开始就制定了
App.vue
<script>
import Content from './components/Content.vue'
import { ref, reactive, toRefs, watch, watchEffect, computed } from 'vue'
export default {
data() {
return {}
},
components: {
Content
},
setup() {
// ref()响应式应用,返回带有value属性的对象,
// 将值封装在对象里,是为了保持JavaScript中数据类型的行为统一
let msg = ref('hello')
function changeMsg() {
msg.value = 'aaa'
console.log(msg);
}
// 通过ref定义响应式数据变量
const counter = ref(0)
function changeCounter() {
counter.value++
}
// watch(侦听的响应式引用,回调函数)
watch(counter, (newValue, oldValue) => {
console.log("newValue==", newValue, "oldValue==", oldValue);
})
// 计算属性
const reverseMsg = computed(() => {
return msg.value.split('').reverse().join('')
})
// 通过reactive应用响应式引用数据类型
const obj = reactive({
name: 'zhangsan',
age: 18,
children: {
name: 'zhang xiao san'
}
})
function changeObj() {
obj.name = 'lisi',
obj.age = 20
}
// watchEffect(回调函数),不需要制定监听的属性,自动收集依赖
watchEffect(() => {
console.log("watchEffect===", obj);
})
// 通过toRefs(object)使结构化的数据重新获得响应式
// 通过ES6扩展运算符进行结构使的对象中的数据不是响应式...obj
return { msg, changeMsg, counter, changeCounter, obj, changeObj, ...toRefs(obj), reverseMsg }
}
/* watch与watchEffect的区别
1 watchEffct不需要指定监听的属性,自动手机依赖,只要在回调用应用了响应式的属性
watch监听指定的属性,可以监听多个
2 watch可以获取到新旧值,watchEffet不可以
3 watchEffect在组件初始化的时候自动执行一次,用来收集依赖,watch不需要,一开始就制定了 */
}
</script>
<template>
<h2>我是app页面</h2>
<p>{{ msg }}</p>
<p>计算属性实现反转:{{ reverseMsg }}</p>
<button @click="changeMsg">修改msg</button>
<p>{{ counter }}</p>
<button @click="changeCounter">counter++</button>
<p>objName:{{ obj.name }}----bojAge:{{ obj.age }}</p>
<button @click="changeObj">修改obj</button>
<h2>{{ obj.children.name }}</h2>
<!-- 使用扩展运算符...obj后可以书写的格式 -->
<p>objName:{{ name }}----bojAge:{{ age }}</p>
<button @click="changeObj">修改obj</button>
<h2>{{ children.name }}</h2>
<Content />
</template>
setup参数
接收两个参数props,contents
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。