vue 는 Proxy 를 사용 하여 양 방향 연결 을 실현 하 는 방법 예시
2189 단어 vueProxy양 방향 바 인 딩
1 Object.defineProperty 실현
원래 vue 2 의 실현 은 Object.defineProperty 를 사용 하여 set 를 감청 하지만 배열 에 대해 서 는 배열 설정 값 을 직접 표시 하여 감청 할 수 없습니다.
function observe(data) {
if (!data || typeof data !== 'object') {
return;
}
//
Object.keys(data).forEach(function(key) {
defineReactive(data, key, data[key]);
});
};
function defineReactive(data, key, val) {
observe(val); //
Object.defineProperty(data, key, {
enumerable: true, //
configurable: false, // defineProperty
get: function() {
return val;
},
set: function(newVal) {
console.log('------- --------')
val = newVal;
}
});
}
2 프 록 시 로 구현Proxy 구현 원 리 를 사용 하 는 것 은 주로 new 하나의 Proxy 대상 입 니 다.data 값 을 대리 합 니 다.주의해 야 할 것 은 배열 의 방법 조작 에 있어 두 번 의 할당 작업 이 발생 할 수 있 습 니 다.한 번 은 값 을 추가 하고 한 번 은 그의 length 값 을 바 꾸 는 것 입 니 다.Object.defineProperty 가 듣 지 못 하 는 배열 에 배열 설정 값 을 표시 하면 Proxy 는 감청 할 수 있 습 니 다.
function observe(data) {
if (!data || typeof data !== 'object') {
return;
}
//
Object.keys(data).forEach(function(_k) {
// Proxy
if (data[_k] && typeof data[_k] === 'object') {
data[_k] = defineReactive(data[_k]);
}
});
}
function defineReactive(data) {
return new Proxy(data, {
set(target, key, value, proxy) {
// , set , length , data ,
if (
Object.prototype.toString.call(data) === "[object Array]" &&
key === "length"
) {
Reflect.set(target, key, value, proxy);
return true;
}
observe(data);
Reflect.set(target, key, value, proxy);
console.log('------- --------')
return true;
}
});
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Fastapi websocket 및 vue 3(Composition API)1부: FastAPI virtualenv 만들기(선택 사항) FastAPI 및 필요한 모든 것을 다음과 같이 설치하십시오. 생성main.py 파일 및 실행 - 브라우저에서 이 링크 열기http://127.0.0.1:...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.