githru / githru-vscode-ext

Lightweight but robust Githru for VSCode Extension
Apache License 2.0
49 stars 83 forks source link

전역상태 zustand store로 리펙토링 #736

Closed Sang-minKIM closed 2 weeks ago

Sang-minKIM commented 1 month ago

Related issue

673

Result

context를 store로 바꾸는 작업입니다. 작업을 하다보니 상태 하나씩 작업해서 PR을 올릴 수 없을 것 같아, 부득이하게 하나의 PR에 많은 코드 변경이 있을 것 같습니다.... 커밋별로 보시고 리뷰해주시면 정말 감사하겠습니다🥹🥹

Work list

  1. Dispatch<SetStateAction> 기존에는 set 함수에 위의 타입을 사용했는데 zustand의 액션함수에 해당 타입을 사용하려면 아래와 같은 로직이 필요합니다.
    
    type RepoStore = {
    repo: string;
    setRepo: Dispatch<SetStateAction<string>>;
    };

export const useRepoStore = create((set) => ({ repo: "", setRepo: (repo) => set((state) => ({ repo: typeof repo === 'function' ? repo(state.repo) : repo })), }));

위의 방식으로 Dispatch<SetStateAction<string>>을 쓰는게 아래와 같은 방법으로 함수 타입을 설정하는 것보다 좋은점이 있는지 궁금합니다.
```ts
type RepoStore = {
  repo: string;
  setRepo: (repo: string) => void;
};

export const useRepoStore = create<RepoStore>((set) => ({
  repo: '',
  setRepo: (repo) => set({ repo }),
}));
Sang-minKIM commented 3 weeks ago

AS-IS

image

TO-BE

image

Context API를 Zustand Store로 바꾸는 작업 완료했습니다.
Summary의 항목을 클릭해서 커밋 내용 상세보기를 했을 때를 비교해보니 리렌더링이 줄어든걸 확실히 볼 수 있네요!

684 에서 useShallow와 선택적 구독에 대한 내용 알려주신 @taboowiths 님 정말 감사합니다!

pcwadarong commented 3 weeks ago

LGTM입니다!!!!👍👍👍👍❗❗❗❗