MVC 구조
M : Model / Data들을 관리하는 요소
V : View / 사용자에게 보여지는 요소
C : Controller / 특정 이벤트가 발생하면 컨트롤러를 통해 모델에 반영
Dispatcher : Store를 통해 state를 관리하는데, UI, 또는 시스템에서 발생하는 액션에대한 맵핑을 당담한다. 즉 액션과 Store의 데이터를 Dispatcher를 통해 진행된다.
MobX란?
MobX의 대표 라이브러리
import React from 'react';
import {observable, runInAction} from 'mobx';
import {observer} from 'mobx=react';
const data = observable({
count:0,
});
// MobX를 통해 관리하는 state
setTimeout(
runInAction(() =>{
data.count++;
}),
1000
);
//observable 데이터에 대한 Action
// action을 주로 사용하지만, 비동기형태를 처리할때 runInAction형태로 사용한다.
@observer
//observable 데이터 참조 컴포넌트
class Counter extends React.Component {
render(){
return <h1>{data.count}</h1>
}
}
export default Counter;
decorator란?
데코레이터는 '데코레이터 함수'(또는 메서드)의 약자이다. 새로운 함수를 반환하여 전달된 함수 또는 메서드의 동작을 수정하는 함수이다.
그렇다면 왜 decorator를 사용하는가?
CRA에서 decorator오류
CRA를 통해 프로젝트를 생성하고 decorator를 사용하면 오류가난다. 이때는 decorator를 사용할수있또록 설정해야한다.
CRA rewired 방법
package.json에서 scripts를 수정한다
'scripts':{
'start':'react-app-rewired start',
'build':'react-app-rewired build',
'text':'react-app-rewired test',
'eject':'react-scripts eject'
},
MobX API
@action은?
관찰 대상 데이터 즉, observable sate의 값을 변경하는 메서드에 적용한다. state에 대한 단순 조회와 같은 메서드에 적용하는것은 의미가 없다.
@observable의 데이터를 변경할시에 @action을 이용해야하는데, @action이 없을시 데이터를 변경시 각각의 데이터마다 렌더링이 일어나 불필요한 렌더링을 일으킨다.
@computed은?
성능향상을 위해 사용하는 API이다. get 메서드에 일반적으로 적용하거나 Model 객체간 전환 시점에 적용한다. @computed가 적용된 메서드를 수행할 때 해당 observable state의 변화가 없을 경우 내부 로직을 생략한다.
@inject는?
스토어 객체를 리액트 컴포넌트로 주입해줄때 사용된다. inject
로 주입이 된 스토어 객체들은 props에서 꺼내서 사용한다. inject
로 주입을 받기 위해서는 proivder
를 통해서 전체 store
들이 제공되어야한다는게 전제되어야한다.
@autorun는?
예로 @observable의 log라는 data가 변경되었을때 수행되는 작업을 지정할때 사용되는 API이다. 하지만 리액트에서는 autorun을 많이 사용하지않는다.
@observer는?
기본적으로 리액트 컴포넌트 모두에다가 적요하는 API이다. observer
는 observable data
를 관찰하는 컴포넌트에 적용하는 API로 @autorun을 이용해서 observable data
가 변경되면 렌더링을 다시한다.