Skip to content

๐Ÿ› [Bug] ์ฐœํ•˜๊ธฐ hydration ์—๋Ÿฌ ํ•ด๊ฒฐย #340

@wynter24

Description

@wynter24

๐Ÿ“„ ๋ฌธ์ œ์ƒํ™ฉ

๋ฌธ์ œ ์ƒํ™ฉ: #339

๋ฌธ์ œ ์›์ธ

Hydration์ด ์™„๋ฃŒ๋˜๊ธฐ ์ „์— React Query ๋˜๋Š” prefetchQuery์—์„œ ๋ณ€๊ฒฝ ์ „ ์บ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜๊ฐ€ ๋ฐœ์ƒํ•จ.

  • prefetchQuery๊ฐ€ hydration ๊ณผ์ •์—์„œ ์ตœ์‹  ๋ฐ์ดํ„ฐ๋ฅผ ์ ์šฉํ•˜์ง€ ๋ชปํ–ˆ์„ ๊ฐ€๋Šฅ์„ฑ
  • React Query๊ฐ€ hydration ์ด์ „์˜ ํด๋ผ์ด์–ธํŠธ ์บ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์šฐ์„  ์‚ฌ์šฉํ–ˆ์„ ๊ฐ€๋Šฅ์„ฑ

โžก๏ธ ์ด๋กœ ์ธํ•ด ์ƒˆ๋กœ๊ณ ์นจ ํ›„์—๋„ ์ฐœํ•˜๊ธฐ ์ƒํƒœ(isLiked: true)๊ฐ€ ๋ฐ˜์˜๋˜์ง€ ์•Š๊ณ , ๊ธฐ์กด ์ƒํƒœ(isLiked: false)๊ฐ€ ์œ ์ง€๋˜๋ฉด์„œ Hydration Error ๋ฐœ์ƒ.

โœ”๏ธ ์žฌํ˜„ ๊ฐ€๋Šฅ ์—ฌ๋ถ€

  • ์˜ˆ
  • ์•„๋‹ˆ์˜ค

๐Ÿ’ป ์ฝ”๋“œ

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

useEffect๋กœ Hydration ์™„๋ฃŒ ์—ฌ๋ถ€๋ฅผ ๊ฐ์ง€ํ•˜์—ฌ ๋ Œ๋”๋ง ์ง€์—ฐ

function BookClubMainPage() {
  const [isHydrated, setIsHydrated] = useState(false);

  useEffect(() => {
    setIsHydrated(true);
  }, []);

  return (
    {isLoading || isFetching || !isHydrated ? (
       <div className="flex h-[400px] justify-center">
         <Loading />
       </div>
     ) : (
       <div className="pb-12">
         <ClubListSection bookClubs={data} filter={filters} />
       </div>
     )}
  );
}

ํ•ด๊ฒฐ ์›๋ฆฌ

  1. SSR ๋‹จ๊ณ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค์ง€๋งŒ, Hydration ์™„๋ฃŒ ์ „๊นŒ์ง€๋Š” ๋ Œ๋”๋งํ•˜์ง€ ์•Š์Œ (Loading ํ‘œ์‹œ)
  2. Hydration ์™„๋ฃŒ ํ›„ (useEffect ์‹คํ–‰ ํ›„) ์ตœ์‹  ๋ฐ์ดํ„ฐ๋กœ ๋ Œ๋”๋ง
  3. ์ด๋กœ ์ธํ•ด ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ ๋ถˆ์ผ์น˜ ํ•ด์†Œ

Reactย Query์˜ ์บ์‹œ๊ฐ€ย ์™„์ „ํžˆย ๋ณต์›๋œ ํ›„์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์–ด hydration error๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ™‹๐Ÿป ์ฐธ๊ณ  ์ž๋ฃŒ

์–ด์ฉ” ์ˆ˜ ์—†๋Š” hydration mismatch๋ฅผ useEffect์—†์ด ํ•ด๊ฒฐํ•˜๊ธฐ
useEffect | Hooks API Reference
hydrateRoot | React
Server Rendering & Hydration | TanStack Query React Docs

Metadata

Metadata

Assignees

Labels

๐Ÿ› Bug๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•œ ์ด์Šˆ๋‚˜ PR

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions