기업협업을 시작하고 상태관리 라이브러리를 한가지 적용해보려고 한다.
그 과정에서 MobX를 조금 배우고있는데 Recoil로 할 것 같지만 배운 김에 조금 정리를 해볼 것이다.
상태관리 라이브러리 중 가장 많이 쓰이고 유명한 것을 Redux이다. 그런데 내가 참여하는 프로젝트의 규모는 조금 작기때문에 차장님의 추천으로 MobX로 적용해보기로 했다. (그런데 새로운 Recoil로 하기로 함)
observable
은 관찰되어지는 data입니다. 즉 특정 컴포넌트에서 사용하는 state입니다.observable
data를 변경하는 함수.
기본적으로 action을 사용하고 runAction
은 비동기적으로 사용한다.
(mobx와 react를 연결 / react component에 적용해서 사용하는 API)
observer
는 observable
를 바라보는 View<Provider>
를 통해 전체 스토어들이 제공되어있어야 한다는 것은 전제되어야한다 import { Provider } from "mobx-react";
import counterStore from "./store/CounterStore";
ReactDOM.render(
<Provider counterStore={counterStore}>
<App />
</Provider>,
document.getElementById("root")
);
// ===> 컴포넌트들이 사용할 수 있게 하기위해 <App /> 에 provider를 적용해주고
// App안에 있는 모든 컴포넌트는 counterStore를 전역적으로 사용할 수 있는 것
<container>
- react component가 위치
- store와 react component를 연결하는 역할
<view>
- react component가 위치
- container에 포함
<repository> (or api)
- 서버와 통신을 담당하는 객체들이 위치하는 클래스
<store> (service)
- 전역 state를 관리하는
<model>
- 서버에서 특정 data를 받았을 때 변환/전환 해주는 class들이 존재
놓치면 안되는 점. mobx 6버전이상 재환경 이라면 makeObservable(this);를 지정해 줘야지 데이터가 변경이 될된다.
import { observable, action, computed, makeObservable } from "mobx";
class TodoStore {
constructor() {
makeObservable(this);
}
주의해야 할 점은 autobind는 inject 위에 두면 에러가 뜬다!
<store>
1. observable 데이터인 _searchText 만들어 줌