반응형
Vue 구성 요소에서 사용자 정의 Getter 정의
내 질문은 Vue와 좀 더 구체적으로 반응성 및 반응성 게터/세터: https://vuejs.org/v2/guide/reactivity.html
Vue 구성 요소에서 나만의 게이터를 정의할 수 있으며 Vue가 자체 반응 게터를 추가하면 어떻게 될까?
Vue는 모든 속성을 거치고 Object.defineProperty를 사용하여 getter/setter로 변환한다.
위의 문장이 의미하는 것은 당신의 각 재산에 대해 반복하는 것이다.data
반응하게 만드는 옵션.
예를 들어 다음을 고려하십시오.data
옵션:
data:{
foo: 'hello world',
bar: 3
}
vue는 그 이상이다.data
다음과 같은 객체(추상적 설명에 불과하다):
let key = Object.keys(data)
for (let i = 0; i < keys.length; i++) {
let val = data[keys[i]];
Object.defineProperty(data, keys[i], {
get(){
// add this property as a dependency when accessed
return val;
},
set(newVal){
//notify for a change
val = newVal;
}
})
}
동일한 vue 소스 코드를 체크아웃하면 속성에 미리 정의된 getter 또는 setter가 있는지 여부를 확인할 수 있다.
그런 다음 다음과 같이 속성 getter를 재정의한다.
Object.defineProperty(obj, key, {
enumerable: true,
configurable: true,
get: function reactiveGetter() {
const value = getter ? getter.call(obj) : val;
if (Dep.target) {
dep.depend();
if (childOb) {
childOb.dep.depend();
if (Array.isArray(value)) {
dependArray(value);
}
}
}
return value;
},
set(newVal) {
//...
}
});
이 선이 보이면 const value = getter ? getter.call(obj) : val;
게터를 정의한 경우 게터가 사용되고 있으며 그 값이 반환된다는 것을 알게 될 것이다.
Vue는 단지 그것과 관련된 몇몇 의존성 관련 방법들을 호출함으로써 그들을 반응하게 만들기 위해 더 많은 일을 하고 있을 뿐이다.
참조URL: https://stackoverflow.com/questions/51059477/defining-user-defined-getters-in-a-vue-component
반응형
'programing' 카테고리의 다른 글
텍스트 파일에 유니코드 텍스트를 쓰는 중? (0) | 2022.04.07 |
---|---|
부에루터: 경로 메타 안에서 경로 매개 변수 값을 얻을 수 있을까? (0) | 2022.04.07 |
Typecript에서 작성한 사용자 정의 React 후크를 npm에 게시하려면 어떻게 해야 하는가? (0) | 2022.04.07 |
vuej에서 단위 테스트 (0) | 2022.04.07 |
Vue js 자식 구성 요소에서 정의되지 않은 소품.하지만 그 대본에서만 (0) | 2022.04.07 |