λ©°μΉ μ , μμ μΉ μ ν리μΌμ΄μ μ κ°λ°ν΄λ³΄κ³ μ Next.js μμ μ 곡νλ λ¬΄λ£ μΉ ν νλ¦Ώμ λ€μ΄λ°μμ κ°λ° μ§νμ νλ μ€ μλμ κ°μ μλ¬κ° λ°μνμλ€.
Error: Hydration failed because the initial UI does not match what was rendered on the server.
ν΄μ : *Hydration μμ μ μ€ν¨νμμ΅λλ€. κ·Έ μμΈμ 첫 λ²μ§Έ UIκ° μλ²μμ renderλ κ²κ³Ό λ§€μΉλμ§ μμκΈ° λλ¬Έμ λλ€.
Next.js 곡μ λ¬Έμμ λ°λ₯΄λ©΄ μ΄ μ€λ₯λ μ ν리μΌμ΄μ
μ rendering νλ λμ 미리 rendered λ React tree(SSR/SSG)μ λΈλΌμ°μ μμ 첫 λ²μ§Έ rendering μ€μ rendered λ React tree κ°μ μ°¨μ΄κ° λ°μνκΈ° λλ¬Έμ΄λ€.
μ΄ μλ¬λ React treeκ° DOMEκ³Ό λκΈ°νλμ§ μμ μκΈ°μΉ μμ μ½ν
μΈ λλ μμ±μ΄ λνλ μ μλ€λ κ²μ μμνλ€.
ν λ§λλ‘ Componentλ₯Ό rendering νκ³ event handler λ₯Ό μ°κ²°νλ νλ‘μΈμ€μ΄λ€.
Reactμ κΈ°λ₯ μ€ νλμΈ hydrate(element, container[, callback])
λ render() λ©μλμ κΈ°λ₯μ μΌλ‘λ λμΌνμ§λ§, ReactDOMServer μ μν΄ λ λλ§ λ HTML contentsλ₯Ό μ§μΉνλ containerμ hydrate νλλ° μ¬μ©λλ€.
Warning: Expected server HTML to contain a matching
<div>
in<p>
.
ν΄μ: <p>
νκ·Έ λ΄λΆμ <div>
νκ·Έκ° λ§€μΉλλ DOM tree κ΅¬μ‘°κ° server HTMLμ ν¬ν¨λ κ²μΌλ‘ μμλ©λλ€.
μ΄κ²μ νμ¬ νλ‘μ νΈ μ½λλ€ μ€, <p>
νκ·Έ λ΄λΆμ child element λ‘ <div>
κ° μ μλλ λΆλΆμ΄ μμ΄μ λ°μνλ κ²½κ³ λ¬Έκ΅¬μ΄λ€. μ΄ Warning μλ¬λ Hydration μλ¬ λ°μ μμΈμ λ»νλ κ² κ°μλ€.
λ°λΌμ, λλ Next.js μ 곡μ λ¬Έμμμ μ μνλλ‘ <p>
λ΄λΆμ <div>
κ° μ μλμ΄ μλ μ½λλ₯Ό μ°Ύμμ λ€μκ³Ό κ°μ΄ μμ νμλλ, λ§λνκ² μλ¬κ° ν΄κ²°λμλ€.
μ°Έκ³ λ‘ about()
ν¨μλ μλμ κ°μ΄ return λλ jsx μ΅μμ νκ·Έκ° <>...</>
μ¦, <div>
μ΄μλ€.
<p>
νκ·Έ μμ <div>
μ κ°μ λΈλ νν νκ·Έ λ£λ κ²μ μ§μνμ