Vue 3.0 에서 Ref 와 Reactive 의 차이 점 에 대한 상세 한 분석
Ref
Ref 는 기본 형식의 응답 식 데 이 터 를 만 드 는 데 사 용 됩 니 다.템 플 릿 은 기본적으로 value 디 스 플레이 데 이 터 를 호출 합 니 다.방법 에서 수정 하려 면 value 의 값 을 수정 해 야 수정 할 수 있 습 니 다.
<!-- >
<template>
<div>{{state}}</div>
</template>
//js
setup(){
let state = ref(10)
state.value = 11
return {state}
}
ReactiveReactive 는 인용 형식의 응답 식 데 이 터 를 만 드 는 데 사 용 됩 니 다.
<!-- >
<template>
<div>{{state.name}}</div>
</template>
//js
setup(){
let state = reactive({name:'aaa'}})
state.name = 'zhangsan'
return {state}
}
Ref 와 Reactive 의 차이Ref 의 본질은 Reactive 를 통 해 만들어 진 것 입 니 다.Ref(10)=>Reactive({value:10});
Ref 템 플 릿 호출 은 value 를 직접 생략 할 수 있 습 니 다.방법 에서 변수의 값 을 바 꾸 려 면 value 의 값 을 수정 해 야 수정 할 수 있 습 니 다.Reactive 는 템 플 릿 에 전 체 를 써 야 합 니 다.그렇지 않 으 면 전체 데 이 터 를 표시 합 니 다.
Reactive 의 본질은 모든 층 의 수 를 proxy 대상 으로 해석 하 는 것 입 니 다.Reactive 의 응답 식 은 기본적으로 재 귀적 입 니 다.특정한 층 의 값 을 바 꾸 면 재 귀적 으로 호출 되 고 dom 을 다시 렌 더 링 합 니 다.
shallow Ref 와 shallow Reactive
Ref 와 Reactive 가 만 든 것 은 모두 재 귀적 인 응답 입 니 다.각 층 의 json 데 이 터 를 proxy 대상 으로 분석 합 니 다.shallow Ref 와 shallow Reactive 가 만 든 비 재 귀적 인 응답 대상 입 니 다.shallow Reactive 가 만 든 데이터 1 층 데이터 변 화 는 dom 을 다시 렌 더 링 합 니 다.
var state = shallowReactive({
a:'a',
gf:{
b:'b',
f:{
c:'c',
s:{d:'d'}
}
}
})
state.a = '1'
//
//state => Proxy {a:"a",gf:{...}}
// state.gf.b = 2
shallow Ref 를 통 해 만 든 응답 대상 은 전체 value 를 수정 해 야 dom 을 다시 렌 더 링 할 수 있 습 니 다.
var state = shallowRef({
a:'a',
gf:{
b:'b',
f:{
c:'c',
s:{d:'d'}
}
}
})
state.value.a = 1
/*
,shallowRef shallowReactive({value:{}}) , value
*/
state.value = {
a:'1',
gf:{
b:'2',
f:{
c:'3',
s:{d:'d'}
}
}
}
shallow Ref 를 사용 했다 면 한 층 의 데이터 만 업데이트 하려 면 triggerRef 를 사용 할 수 있 습 니 다.
var state = shallowRef({
a:'a',
gf:{
b:'b',
f:{
c:'c',
s:{d:'d'}
}
}
})
state.value.gf.f.s.d = 4
triggerRef(state)
페이지 가 다시 렌 더 링 됩 니 다.toRaw---데이터 만 수정 하고 페이지 를 렌 더 링 하지 않 습 니 다.
응답 식 데이터 만 수정 하고 페이지 렌 더 링 을 일 으 키 지 않 으 려 면 toRaw 를 사용 하 십시오.
var obj = {name:'test'}
var state = reactive(obj)
var obj2 = toRaw(state)
obj2.name = 'zs'//
----
// ref value
var obj = {name:'test'}
var state = ref(obj)
var obj2 = toRaw(state.value)
markRaw---데이터 추적 하지 않 음데이터 가 추적 되 지 않 으 려 면 응답 식 데이터 로 이 방법 을 호출 할 수 있 습 니 다.수정 데 이 터 를 추적 하여 페이지 를 다시 렌 더 링 할 수 없습니다.
var obj = {name:'test'}
obj = markRaw(obj)
var state = reactive(obj)
state.name = 'zs'//
toRef---데이터 원본 과 관련 하여 UI 를 수정 하지 않 음ref 에서 만 든 응답 변 수 를 사용 하면 원본 데이터 와 연결 되 지 않 습 니 다.원본 데이터 와 연결 하려 고 하지만 데이터 변경 이 UI 를 업데이트 하지 않 으 면 toRef 로 만 듭 니 다.
var obj = {name:'test'}
var state = ref(obj.name)
state.name = 'zs' // obj name ,UI
///
var obj = {name:'test'}
var state = toRef(obj,'name') //
state.name = 'zs'// obj name , UI
toRefs---여러 개의 toRef 속성 값 설정toRef 속성 값 을 여러 개 설정 하려 면 toRefs 를 사용 할 수 있 습 니 다.
var obj = {name:'test',age:16}
var state = toRefs(obj)
state.name.value = 'zs'//obj name , UI
state.age.value = 18//obj age , UI
custom Ref---ref 사용자 정의customeRef 이 방법 을 통 해 응답 식 ref 방법 을 사용자 정의 할 수 있 습 니 다.
function myRef(value){
/*
customRef , 2 ,get/set , get , set
customRef 2 ,track/trigger,track ,get , 。trigger ,set UI
*/
return customRef((track,trigger)=>{
return {
get(){
track()//
return value
},
set(newVal){
value = newVal
trigger()// UI
}
}
})
}
setup(){
var age = myRef(18)
age.value = 20
}
ref 페이지 묶 기 탭vue 2.0 은 this.refs 를 통 해 dom 요 소 를 얻 을 수 있 습 니 다.vue 3 는 이 조작 을 취 소 했 습 니 다.refs 가 dom 요 소 를 얻 지 못 했 습 니 다.vue 3 는 dom 요 소 를 얻 지 못 했 습 니 다.vue 3 는 이 조작 을 취 소 했 습 니 다.refs 라 는 속성 값 이 없 으 면 ref()방 법 으로 응답 식 변수 와 dom 요 소 를 묶 을 수 있 습 니 다.
<template>
<div ref="box"></div>
</template>
import {ref,onMounted} from 'vue'
/*
setup beforeCreate created
*/
<script>
setup(){
var box = ref(null)
onMounted(()=>{
console.log('onMounted',box.value)
})
console.log(box.value)
return {box}
}
</script>
총결산Vue 3.0 에서 Ref 와 Reactive 의 차이 점 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.Vue 3.0 Ref 와 Reactive 의 차이 점 에 관 한 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 읽 어 주시 기 바 랍 니 다.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
내 새 책,오픈 소스 관리 시스템, vue-bag-adminvue-bag-admin,use Vue3+Vite2.6+TypeScript+ant-design-vue,Provide the basic framework, quickly build enterprise-level bac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.