<template> 姓:<input v-model="person.firstName"><br/><br/> 名:<input v-model="person.lastName"><br/><br/> <span>全名:{{person.fullname}}</span><br/><br/> <span>全名:<input v-model="person.fullname"></span> </template> <script> import {reactive,computed} from 'vue' export default { name: 'HelloWorld', setup(){ let person = reactive({ firstName:"张", lastName:"三" }) //computed简写形式,没考虑修改 /*person.fullname = computed(()=>{ return person.firstName+"-"+person.lastName; })*/ person.fullname = computed({ get(){ return person.firstName+"-"+person.lastName; }, set(value){ const nameArr = value.split('-'); person.firstName = nameArr[0]; person.lastName = nameArr[1]; } }) return{ person, } } } </script>
1. Vue2의 watch 구성 기능과 일치하는 경우: oldValue를 올바르게 얻을 수 없으면 심층 모니터링이 강제로 열립니다(심층 구성이 유효하지 않음)
반응성: 심층 구성이 유효함
vu2가
<template> <h3>当前求和为:{{ sum }}</h3> <button @click="sum++">点我sum++</button> </template> <script> import {ref} from 'vue' export default { name: 'Demo', watch: { /*sum(oldValue,newValue){ console.log("sum发生了变化",oldValue,newValue); }*/ sum: { immediate: true, deep:true, handler(newValue,oldValue) { console.log("sum发生了变化", newValue, oldValue); } } }, setup() { let sum = ref(0); return { sum, } } } </script>
<template> <h3>当前求和为:{{ sum }}</h3> <button @click="sum++">点我sum++</button>> </template> <script> import {ref, watch} from 'vue' export default { name: 'Demo', setup() { let sum = ref(0); let msg = ref("你好啊"); //情况一:监视ref所定义的一个响应式数据 watch(sum, (newValue, oldValue) => { console.log("sum发生了变化", newValue, oldValue); }) return { sum } } } </script>로 정의된 반응형 데이터 모니터링 watch 다음에서 구성 항목을 전달하고 즉시 구성 및 기타 구성을 전달할 수도 있습니다.
watch(sum, (newValue, oldValue) => {
console.log("sum发生了变化", newValue, oldValue);
},{immediate:true})
<template> <h3>当前求和为:{{ sum }}</h3> <button @click="sum++">点我sum++</button> <hr/> <h3>信息为:{{ msg }}</h3> <button @click="msg+='!'">点我sum++</button> </template> <script> import {ref, watch} from 'vue' export default { name: 'Demo', setup() { let sum = ref(0); let msg = ref("你好啊"); //情况二:监视ref所定义的多个响应式数据 watch([sum,msg],(newValue, oldValue) => { console.log("sum发生了变化", newValue, oldValue); }) return { sum, msg } } } </script>
3. 사례 3: 반응성
<template> <h3>姓名:{{ person.name }}</h3> <h3>年龄:{{ person.age }}</h3> <h3>薪资:{{ person.job.j1.salary }}K</h3> <button @click="person.name+='~'">修改姓名</button> <button @click="person.age++">修改年龄</button> <button @click="person.job.j1.salary++">涨薪</button> </template> <script> import {reactive, watch} from 'vue' export default { name: 'Demo', setup() { let person = reactive({ name: "张三", age: 18, job:{ j1:{ salary:20 } } }) //情况三:监视reactive所定义的一个响应式数据全部属性 // 1\注意:无法正确获取oldvalue // 2\注意:强制开启了深度监视(deep配置无效) watch(person, (newValue, oldValue) => { console.log("person发生了变化", newValue, oldValue); }) return { person } } } </script>
4. 사례 4: 반응성
5: 속성으로 정의된 반응성 데이터 모니터링 Reactive
//情况四:监视reactive所定义的一个响应式数据某个属性 watch(()=>person.name, (newValue, oldValue) => { console.log("person的name发生了变化", newValue, oldValue); })
6. 특수 상황, 객체의 객체 속성을 모니터링하여 deep:true
//情况五:监视reactive所定义的一个响应式数据某个属性 watch([()=>person.name,()=>person.age], (newValue, oldValue) => { console.log("person的name或age发生了变化", newValue, oldValue); })
을 시작하려면 ref로 정의된 객체 응답 데이터를 모니터링해야 합니다. .value 또는 deep:true
watch(()=>person.job, (newValue, oldValue) => { console.log("person的job发生了变化", newValue, oldValue); },{deep:true})//由于监视的是reactive对象中的某个属性,deep奏效
3 watchEffect
watch
의 루틴은 둘 다 지정합니다. 속성을 모니터링할 때 모니터링되는 콜백 watchEffect
도 지정해야 합니다. > 루틴은 다음과 같습니다. 모니터링할 속성, 모니터링되는 콜백에 사용되는 속성, 모니터링할 속성을 지정할 필요가 없습니다
watchEffect
계산
과 비슷합니다. 코드>: . 하지만 computed
는 계산된 값(콜백 함수의 반환 값)에 중점을 두기 때문에 반환 값을 작성해야 합니다
watchEffect
는 프로세스(콜백 함수의 함수 본문)에 더 많은 관심을 기울이기 때문에 반환 값을 작성할 필요가 없습니다. let person = ref({ name: "张三", age: 18, job:{ j1:{ salary:20 } } }) watch(person.value, (newValue, oldValue) => { console.log("person的value发生了变化", newValue, oldValue); }) 或 watch(person, (newValue, oldValue) => { console.log("person的value发生了变化", newValue, oldValue); },{deep:true})
예를 들어 위의 예를 사용하세요. watch
的套路是:既要指明监视的属性,也要指明监视的回调
watchEffect
的套路是:不用指明监视哪个属性,监视的回调中用到哪个属性,那就监视哪个属性
watchEffect
有点像computed
:
。但computed
注重的计算出来的值(回调函数的返回值),所以必须要写返回值
。而watchEffect
//watchEffect所指定的回调中用到的数据只要发生变化,则直接重新执行回调 watchEffect(()=>{ const xl = sum.value const x2 = person.age console.log( "watchEffect配置的回调执行了") })
마지막으로 watch 및 watchEffect를 사용하여 이름의 예를 구현합니다. import {reactive,watchEffect} from 'vue'
export default {
name: 'Demo',
setup() {
let person = reactive({
name: "张三",
age: 18,
job:{
j1:{
salary:20
}
}
})
watchEffect(()=>{
const x1 = person.name;
console.log("watchEffect所指定的回调执行了"+x1);
})
return {
person
}
}
}
</script>
위 내용은 Vue3에서 계산, 감시, watchEffect를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!