Vue.set()와 this.$set()의 사용 과 차이
3928 단어 Vue.set()this.$set()
data () {
return {
student: {
name: '',
sex: ''
}
}
}
mounted () { // ―― ,
this.student.age = 24
}
ES5 의 제한 으로 Vue.js 는 대상 속성의 추가 또는 삭 제 를 감지 할 수 없습니다.Vue.js 는 인 스 턴 스 를 초기 화 할 때 속성 을 getter/setter 로 바 꾸 기 때문에 속성 은 data 대상 에서 만 Vue.js 를 변환 시 켜 야 응답 할 수 있 습 니 다.올 바른 쓰기:this.$set(this.data,"key",value')
mounted () {
this.$set(this.student,"age", 24)
}
::Vue 에서 루트 응답 속성 을 동적 으로 추가 할 수 없습니다.예 를 들 면:
const app = new Vue({
data: {
a: 1
}
// render: h => h(Suduko)
}).$mount('#app1')
Vue.set(app.data, 'b', 2)
Vue.set(object,propertyName,value)방법 으로 포 함 된 대상 에 응답 식 속성 을 추가 할 수 있 습 니 다.예 를 들 어
var vm=new Vue({
el:'#test',
data:{
//data info
info:{
name:' ';
}
}
});
// info
Vue.set(vm.info,'sex',' ');
Vue.set()와 this.$set()의 실현 원리먼저 Vue.set()의 소스 코드 를 살 펴 보 겠 습 니 다.
import { set } from '../observer/index'
...
Vue.set = set
...
this.$set()의 원본 코드 를 다시 보 겠 습 니 다:
import { set } from '../observer/index'
...
Vue.prototype.$set = set
...
결과적으로 우 리 는 Vue.set()와 this.$set()두 api 의 실현 원리 가 기본적으로 똑 같 고 모두 set 함 수 를 사용 한 것 을 발견 했다.set 함 수 는.../observer/index 파일 에서 내 보 냅 니 다.차이 점 은 Vue.set()는 set 함 수 를 Vue 구조 함수 에 연결 하 는 것 입 니 다.this.$set()는 set 함 수 를 Vue 원형 에 연결 하 는 것 입 니 다.
function set (target: Array<any> | Object, key: any, val: any): any {
if (process.env.NODE_ENV !== 'production' &&
(isUndef(target) || isPrimitive(target))
) {
warn(`Cannot set reactive property on undefined, null, or primitive value: ${(target: any)}`)
}
if (Array.isArray(target) && isValidArrayIndex(key)) {
target.length = Math.max(target.length, key)
target.splice(key, 1, val)
return val
}
if (key in target && !(key in Object.prototype)) {
target[key] = val
return val
}
const ob = (target: any).__ob__
if (target._isVue || (ob && ob.vmCount)) {
process.env.NODE_ENV !== 'production' && warn(
'Avoid adding reactive properties to a Vue instance or its root $data ' +
'at runtime - declare it upfront in the data option.'
)
return val
}
if (!ob) {
target[key] = val
return val
}
defineReactive(ob.value, key, val)
ob.dep.notify()
return val
}
set 함수 가 target,key,val 로 세 개의 인 자 를 받 는 것 을 발 견 했 습 니 다.그 중에서 target 의 값 은 배열 이나 대상 입 니 다.이것 은 홈 페이지 에서 제시 한 Vue.set()방법 을 호출 할 때 들 어 오 는 매개 변수 와 대응 합 니 다.참고:
vue 에서 만난 구덩이-변화 검출 문제(배열 관련)
Vue.set()와 this.$set()의 사용 과 차이 점 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.Vue.set()와 this.$set()에 관 한 더 많은 내용 은 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!