우리가 여러 페이지를 만들수록 각각의 페이지에서 state의 갯수가 늘어 헷갈리는 경우가 종종 발생한다
context api 방식을 사용하면 가장 상위의 부모폴더에서 선언한 state를 props를 사용하지않고 어떤 폴더에서도 사용이 가능하다
전에는 useContext를 사용했는데 문제점이 발생해서 라이브러리가 등장했다
그 라이브러리 역시 context-api로 만들어졌는데
그것이 바로 recoil이다
recoil을 이용한 식
index 폴더
import { useEffect } from "react";
import GlobalStateContainer from "../../src/components/units/board/21-global-state/BoardWrite.container";
import { useRecoilState } from "recoil";
import { isEditState } from "../../src/commons/store/index";
export default function GlobalStatePage() {
const [isEdit, setIsEdit] = useRecoilState(isEditState);
useEffect(() => {
setIsEdit(true);
}, []);
return <GlobalStateContainer />;
}
컨테이너 폴더
import GlobalStatePresenter from "./BoardWrite.presenter";
export default function GlobalStateContainer() {
return <GlobalStatePresenter />;
}
프레젠터 폴더
import { useRecoilState } from "recoil";
import { isEditState } from "../../../../commons/store/index";
export default function GlobalStatePresenter() {
const [isEdit, setIsEdit] = useRecoilState(isEditState);
return <div>{isEdit ? "수정하기" : "등록하기"}</div>;
}
index 폴더에서 선언한 것을 props 없이 globalstate를 이용해 사용한다
tore(스토어)는 상태가 관리되는 오직 하나의 공간이다.
Action(액션)은 앱에서 스토어에 운반할 데이터를 말한다.
Action(액션)은 자바스크립트 객체 형식으로 되어있다.
Action(액션)을 Store(스토어)에 바로 전달하는 것이 아니다.
Action(액션)을 Reducer(리듀서)에 전달해야한다.
Reducer(리듀서)가 주문을 보고 Store(스토어)의 상태를 업데이트하는 것이다.
Action(액션)을 Reducer(리듀서)에 전달하기 위해서는 dispatch() 메소드를 사용해야한다.
reduce와는 비슷하지만 다른 상태 라이브러리입니다.
모든 상태변화가 일어나는 부분을 자동으로 추적해주는 역할을 합니다
특정 부분이 바뀌면, MobX에서는 정확히 어떤 부분이 바뀌었는지 알 수 있음
이 state의 변화는 reaction과 computations를 일으킴
값이 바뀜에 따라 해야 할 일을 정하는 것을 의미
Observable State가 사용자가 지정한 것을 포함한 모든 변경사항
상태를 변경시키는 모든 것
데이터 가져오기를 위한 React Hooks
SWR은 먼저 캐시(스태일)로부터 데이터를 반환한 후, fetch 요청(재검증)을 하고, 최종적으로 최신화된 데이터를 가져옵니다
swr은 한번 fetch 한 원격상태의 데이터를 내부적으로 캐시하고 다른 컴포넌트에서 동일한 상태를 사용하고자 할 경우 이전에 캐시했던 상태를 그대로 리턴해 주기 때문에 서로 다른 컴포넌트가 동일한 상태를 공유할 수 있다