Meteor의 반응성은 배후에서 어떻게 작동합니까?
문서를 읽고 reactivity이면 의 소스를 살펴 봤지만 이해가되지 않습니다.
누군가 마술처럼 보이기 때문에 이것이 장면 뒤에서 어떻게 작동하는지 설명 할 수 있습니까 :).
따라서 실제로는 다소 간단합니다. 기본 수준에는 두 가지 유형의 기능이 포함됩니다.
리 액티브 컨텍스트를 생성하는 함수 (리 액티브 함수)
반응 컨텍스트를 무효화하는 기능 (기능 무효화)
둘 다 할 수있는 기능. (나는 3 개가 거짓말을했다)
a를 호출하면 meteor가 전 세계적으로 저장 하고 콜백을 구독하는 해당 유성 reactive function
이 생성 됩니다. 반응 함수에 전달하는 함수 또는 그 안에서 실행되는 모든 함수 는 전류 를 가져와 로컬에 저장할 수 있습니다. 이러한 함수는 db 업데이트 또는 단순히 타이머 호출과 같이 언제든지이를 무효화 할 수 있습니다. 그런 다음 원본 은 해당 이벤트를 수신하고 자체를 재평가합니다.context
reactive function
invalidation
invalidating function
context
context
reactive function
다음은 유성 함수를 사용하는 단계별 방법입니다 (이전 Tracker.autorun
에는라고 함 Deps.autorun
).
Tracker.autorun(function(){
alert("Hello " + Session.get("name"));
});
Session.set("name", "Greg");
- 자동 실행은 매개 변수로 함수를 사용합니다.
- 자동 실행이이 기능을 실행하기 전에
context
- autorun은의
context
무효화 이벤트에 콜백을 첨부합니다. - 이 콜백은 자동 실행에 전달 된 함수를 다시 실행합니다.
- 그런 다음 함수가
context
에서 처음으로 실행됩니다 . - Meteor는 이것을
context
현재 활성 상태로 전 세계에 저장합니다.context
- 함수 내부에는 또 다른 함수가 있습니다. Session.get ()
- 에 Session.get ()는 둘 다
reactive function
및invalidating function
- Session.get은 자체적으로 설정하고
context
내부적으로 "name"키와 연결합니다. - Session.get은 meteor에서 전역 적으로 현재 컨텍스트 (자동 실행의 컨텍스트)를 검색합니다.
- Session.get이 자신의 컨텍스트에 등록하는 무효화 콜백은 단순히 둘러싸는 컨텍스트 (이 경우 자동 실행의 컨텍스트)를 무효화합니다.
- 이제 2 개의 컨텍스트, 자동 실행 및 session.get이 있습니다.
이러한 함수가 반환되면 meteor는 활성 컨텍스트 전역 변수를 정리합니다.
Session.set은
context
.- 이 경우
context
"name"키와 관련된 Session에서 생성 된 모든을 무효화합니다. - 이들 모두
contexts
무효화되면 무효화 콜백을 실행합니다. - 이러한 콜백은 둘러싸고있는를 무효화 할뿐입니다
context
(이것은 무효화 콜백이해야하는 것이 아니라 Session.get의 디자인입니다). - 엔 클로징은
contexts
이제 무효화 콜백을 실행합니다. - 자동 실행의 경우 해당 콜백은 원래 자동 실행에 전달한 함수를 실행 한 다음
context
다시 설정 합니다.
전체 구현은 실제로 다소 간단합니다. https://github.com/meteor/meteor/blob/master/packages/tracker/tracker.js에서 볼 수 있습니다.
작동 방식에 대한 좋은 예는 https://github.com/meteor/meteor/blob/master/packages/reactive-dict/reactive-dict.js 에서 찾을 수 있습니다.
리 액티브 프로그래밍은 실제로 유성 또는 JS 관련이 아닙니다
. http://en.wikipedia.org/wiki/Reactive_programming
참고 URL : https://stackoverflow.com/questions/10260015/how-does-meteors-reactivity-work-behind-the-scenes
'code' 카테고리의 다른 글
pdfminer를 라이브러리로 사용하는 방법 (0) | 2020.11.16 |
---|---|
PhantomJS 인스턴스의 '풀'을 관리하는 방법 (0) | 2020.11.15 |
Oracle의 기존 테이블에 자동 증가 기본 키 추가 (0) | 2020.11.15 |
Node.js 스크립트에 대한 적절한 해시 뱅 (0) | 2020.11.15 |
C의 포인터에서 배열의 크기를 어떻게 얻을 수 있습니까? (0) | 2020.11.15 |