인프런 커뮤니티 질문&답변

nureongi0214님의 프로필 이미지
nureongi0214

작성한 질문수

Redux vs MobX (둘 다 배우자!)

섹션 3 mobx autorun 관련 질문입니다.

작성

·

163

0

const state = observable({
  name: "zero",
  age: 28,
  married: false,
});

autorun(() => {
  console.log("autorun : " + state.name);
});

reaction(
  () => state.name,
  () => {
    console.log("reaction : name changed");
  }
);

runInAction(() => {
  state.name = "nureongi";
  state.age = 26;
});

const action1 = action(() => {
  state.married = true;
});

const action2 = action(() => {
  state.married = false;
})

action1();
action2();

/**
autorun : zero
autorun : nureongi
reaction : name changed
**/

안녕하세요! 강의 잘 듣고 있습니다.

 

제가 궁금한 것은 강의에서 autorun은 observable에 담긴 모든 state가 변경될 때 마다 실행된다고 하셨는데

실제 실험해보니 결과가 조금 다르게 나온 것 같았습니다.

그래서 확인해보니 다음과 같이 동작한다는 사실을 알게 되었습니다.

 

  1. autorun이 정의될 때 한 번 실행

  2. autorun 함수 내부에서 참조하고 있는 observable state가 변경될 때 실행

 

아마 버전이 업데이트 되면서 바뀐 것 같은데 제가 알게 된 사실이 맞을까요?

답변 1

1

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

autorun에 state.name을 담아두셨으니 state.name이 변경될 때만 autorun이 실행되는 게 맞습니다. autorun.married가 바뀔 때는 안 실행되는 거죠. 버전 업데이트 전에도 원래부터 그랬던 걸로 기억합니다.

nureongi0214님의 프로필 이미지
nureongi0214
질문자

감사합니다!

제가 섹션 3 강의에서 autorun은 액션이 실행될 때마다 무조건 실행된다고 이해해서 혼동이 왔었네요

nureongi0214님의 프로필 이미지
nureongi0214

작성한 질문수

질문하기