it-source

Mobx - runInAction() 사용.그게 왜 필요하죠?

criticalcode 2023. 4. 1. 09:34
반응형

Mobx - runInAction() 사용.그게 왜 필요하죠?

나는 이 주제에 관한 다양한 웹사이트를 읽었지만 왜 우리가 이 주제를 필요로 하는지 알아내지 못했다.runInAction방법 및 작동 방식에 대해 설명합니다.

누가 설명 좀 해줄래?runInAction기능성?

감사해요.

간단히 말하면, 당신은 정말 필요 없습니다. runInAction사용하지 않고 어플리케이션을 작성할 수 있으며, 정상적으로 동작할 수 있습니다.

그러나 더 큰 코드베이스에서 작업 중인 경우 몇 가지 모범 사례를 적용하려면 mobx 기능인 "강제 액션/엄격 모드"를 사용할 수 있습니다. 이 기능은 기본적으로 액션 내에서 상태를 수정해야 합니다.동작은 상태의 일부가 변경된 이유를 명확히 하고 mobx devtools에서 유용한 디버깅 정보를 제공하기 때문에 유용합니다.

이 구성 플래그를 사용하여 작업 외부에서 상태를 수정하려고 하면 mobx에서 오류가 발생합니다.


그래, 뭔데?runInAction?

예를 들어, 이 예에서는runInAction:

loadWeather = city => {
  fetch(
    `https://abnormal-weather-api.herokuapp.com/cities/search?city=${city}`
  )
    .then(response => response.json())
    .then(data => {
      this.setWeatherData(data);   //   <==== here
    });
};


@action
setWeatherData = data => {
  this.weatherData = data;   
};

strict 모드를 사용하고 있기 때문에 weatherData를 설정하기 위한 새로운 액션을 정의해야 했습니다.

한 번만 사용하기 위해 액션을 정의해야 하는 경우 이 작업은 금방 지루해질 수 있습니다.

자, 온다runInAction단축할 수 있습니다.

loadWeatherRunInThen = city => {
  fetch(`https://abnormal-weather-api.herokuapp.com/cities/search?city=${city}`)
    .then(response => response.json())
    .then(data => {
      runInAction(() => {
        this.weatherData = data;         // <====== We dont have to define an action
      });
    });
};

그러니까 기본적으로는runInAction는 코드 조각을 가져와 액션을 수동으로 작성할 필요 없이 익명 액션으로 실행합니다.

상세한 것에 대하여는, 다음의 링크를 참조해 주세요.


편집:

위의 답변은 Mobx 4 시절이었습니다.

Mobx 6의 경우:

기본적으로 MobX 6 이상에서는 작업을 사용하여 상태를 변경해야 합니다.단, 이 동작을 디세블로 하도록 MobX를 설정할 수 있습니다.

새로운 매뉴얼 링크:

https://mobx.js.org/actions.html#runinaction

https://mobx.js.org/actions.html#disabling-mandatory-actions-

https://mobx.js.org/configuration.html#enforceactions

언급URL : https://stackoverflow.com/questions/57271153/mobx-runinaction-usage-why-do-we-need-it

반응형