Cocktail-Masters / Banana-Vote-FE

https://bvote.co.kr
4 stars 3 forks source link

Zustand store 생성, 사용자 상태 관리, 서버 사이드 렌더링 문제 해결 #157

Closed win9612 closed 1 year ago

win9612 commented 1 year ago

개요

발생한 이슈

주요 코드

export const useMainStore = create( persist( immer((set) => ({ ...createUserSlice(set), })), { name: "zustand-persist", } ) );


* useStore 커스텀 훅 (서버사이드 렌더링 방지)
```typescript
import { useState, useEffect } from "react";

export const useStore = <T, F>(
  store: (callback: (state: T) => unknown) => unknown,
  callback: (state: T) => F
) => {
  const result = store(callback) as F;
  const [data, setData] = useState<F>();

  useEffect(() => {
    setData(result);
  }, [result]);

  return data;
};

const Test = () => { const store = useStore(useMainStore, (state) => state); console.log(store);

return ( <div id="test" className="flex h-14 w-full items-center justify-center rounded-2xl bg-indigo-100 text-black" onClick={() => store!.setNickname(nanoid())}

user nickname : {store && store.user.nickname}

); };

export default Test;



## 참고 링크
* https://docs.pmnd.rs/zustand/getting-started/introduction
* https://velog.io/@ehrbs2021/React-typescript-zustand%EC%97%90-immer-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0
* https://velog.io/@giyeon/React-js-%EC%83%81%ED%83%9C%EA%B4%80%EB%A6%AC-Zustand
jsc7727 commented 1 year ago

persist 사용할 때 hydration error 처리