code

Meteor의 반응성은 배후에서 어떻게 작동합니까?

codestyles 2020. 11. 15. 11:20
반응형

Meteor의 반응성은 배후에서 어떻게 작동합니까?


문서를 읽고 reactivity이면소스를 살펴 봤지만 이해가되지 않습니다.

누군가 마술처럼 보이기 때문에 이것이 장면 뒤에서 어떻게 작동하는지 설명 할 수 있습니까 :).


따라서 실제로는 다소 간단합니다. 기본 수준에는 두 가지 유형의 기능이 포함됩니다.

  1. 리 액티브 컨텍스트를 생성하는 함수 (리 액티브 함수)

  2. 반응 컨텍스트를 무효화하는 기능 (기능 무효화)

  3. 둘 다 할 수있는 기능. (나는 3 개가 거짓말을했다)

a를 호출하면 meteor가 전 세계적으로 저장 하고 콜백을 구독하는 해당 유성 reactive function이 생성 됩니다. 반응 함수에 전달하는 함수 또는 그 안에서 실행되는 모든 함수 는 전류 를 가져와 로컬에 저장할 수 있습니다. 이러한 함수는 db 업데이트 또는 단순히 타이머 호출과 같이 언제든지이를 무효화 할 수 있습니다. 그런 다음 원본 은 해당 이벤트를 수신하고 자체를 재평가합니다.contextreactive functioninvalidationinvalidating functioncontextcontextreactive function

다음은 유성 함수를 사용하는 단계별 방법입니다 (이전 Tracker.autorun에는라고 함 Deps.autorun).

Tracker.autorun(function(){ 
  alert("Hello " + Session.get("name"));
});

Session.set("name", "Greg");
  1. 자동 실행은 매개 변수로 함수를 사용합니다.
  2. 자동 실행이이 기능을 실행하기 전에 context
  3. autorun은의 context무효화 이벤트에 콜백을 첨부합니다.
  4. 이 콜백은 자동 실행에 전달 된 함수를 다시 실행합니다.
  5. 그런 다음 함수가 context에서 처음으로 실행됩니다 .
  6. Meteor는 이것을 context현재 활성 상태로 전 세계에 저장합니다.context
  7. 함수 내부에는 또 다른 함수가 있습니다. Session.get ()
  8. 에 Session.get ()는 둘 다 reactive functioninvalidating function
  9. Session.get은 자체적으로 설정하고 context내부적으로 "name"키와 연결합니다.
  10. Session.get은 meteor에서 전역 적으로 현재 컨텍스트 (자동 실행의 컨텍스트)를 검색합니다.
  11. Session.get이 자신의 컨텍스트에 등록하는 무효화 콜백은 단순히 둘러싸는 컨텍스트 (이 경우 자동 실행의 컨텍스트)를 무효화합니다.
  12. 이제 2 개의 컨텍스트, 자동 실행 및 session.get이 있습니다.
  13. 이러한 함수가 반환되면 meteor는 활성 컨텍스트 전역 변수를 정리합니다.

  14. Session.set은 context.

  15. 이 경우 context"name"키와 관련된 Session에서 생성 된 모든을 무효화합니다.
  16. 이들 모두 contexts무효화되면 무효화 콜백을 실행합니다.
  17. 이러한 콜백은 둘러싸고있는를 무효화 할뿐입니다 context(이것은 무효화 콜백이해야하는 것이 아니라 Session.get의 디자인입니다).
  18. 엔 클로징은 contexts이제 무효화 콜백을 실행합니다.
  19. 자동 실행의 경우 해당 콜백은 원래 자동 실행에 전달한 함수를 실행 한 다음 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

반응형