π μλ‘κ³ μΉ¨ μ μ€λ₯ νμ΄μ§κ° λ μ!
νμ¬ νμ¬μμ Next.js
λ₯Ό μ΄μ©ν νλ‘μ νΈλ₯Ό μ§ννκ³ μλλ°
νΉμ νμ΄μ§μμ μλ‘κ³ μΉ¨μ νκ±°λ URL
μ ν΅ν΄ μ§μ μ κ·Όμ μλν κ²½μ°
μλ¬κ° λ°μνλ©° μλ¬ νμ΄μ§λ‘ 리λ€μ΄λ μ λλ μ΄μκ° μμμ΅λλ€.
π μ€λ₯ λ°μ μμΈμ?
ν΄λΉ νμ΄μ§μμλ custom hook
μ μ¬μ©νκ³ μμλλ° μ¬κΈ°μ λ¬Έμ κ° λ°μν κ²μ΄μμ΅λλ€.
π‘ λ¬Έμ κ° λ custom hook
λ€μμ μ΄λ²μ λ¬Έμ λ₯Ό μΌμΌν¨ μ£Όλ²μΈ custom hook
μ κ°λ¨ν μμμ
λλ€.
export default const customHook = () => {
const [flag, setFlag] = useState(Number(localStorage.getItem(countKey) || '0'))
// λͺκ°μ§ μμ
λ€ ...
return [flag, setFlag]
}
Next.js
μμ SSR
μ ν λ νμ΄μ§λ₯Ό μ²μ λ λλ§νλ κ³Όμ μμλ
window
λ document
μ μ κ°μ²΄κ° μ‘΄μ¬νμ§ μμ΅λλ€.
μμ κ²½μ° window
κ°μ²΄μ λ‘컬 μ€ν 리μ§μ μ κ·Όνκ³ μκΈ° λλ¬Έμ undefined
μ°Έμ‘° μ€λ₯κ° λ°μνκ²λ©λλ€.
π window μ°Έμ‘° μ€λ₯ ν΄κ²°νκΈ°
1οΈβ£ typeof μ°μ°μ
첫λ²μ§Έ λ°©λ²μ window
κ°μ²΄κ° μ‘΄μ¬νλμ§ νλ¨νλ κ²μ
λλ€.
μ μμ μ μ΄ λ°©λ²μ μ μ©νλ©΄ λ€μκ³Ό κ°μ΄ μ½λλ₯Ό λ°κΏ μ μμ΅λλ€.
const [flag, setFlag] = useState(
typeof window !== 'undefined'
? Number(localStorage.getItem(resurrectionCountKey)) || 0
: 0,
)
2οΈβ£ useEffect Hook
κ·Έ λ€μ λ°©λ²μ useEffect
λ₯Ό μ΄μ©νλ κ²μ
λλ€.
useEffect
λ λ λλ§ μ΄νμ νΈμΆλκΈ° λλ¬Έμ μ€μ§ ν΄λΌμ΄μΈνΈ μ¬μ΄λμμλ§ λμν¨μ 보μ₯ν μ μμ΅λλ€.
λ°λΌμ μμ νκ² μ μκ°μ²΄μ μ κ·Όμ΄ κ°λ₯ν©λλ€.
useEffect(() => {
/** μ¬κΈ°μ window νΉμ document κ°μ²΄μ μ κ·ΌνκΈ° */
}, [])
3οΈβ£ next/dynamic
Next.js
λ ES2020 μ dynamic import
λ₯Ό μ§μν©λλ€.
ssr: false
μ΅μ
μ μ¬μ©νλ©΄ SSR
μμ΄ μ»΄ν¬λνΈλ₯Ό λμ μΌλ‘ λΆλ¬μ¬ μ μμ΅λλ€.
import dynamic from 'next/dynamic'
const DynamicComponentWithNoSSR = dynamic(
() => import('@/components/hello'),
{ ssr: false }
)
λ¬Έμ κ° λ custom hook
μ μ¬μ©νλ μ»΄ν¬λνΈλ₯Ό μ λ°©λ²μ μ΄μ©ν΄ λμ μΌλ‘ λΆλ¬μ¨λ€λ©΄
λΈλΌμ°μ μμλ§ λμν μ μλ μ½λλ₯Ό λ¬Έμ μμ΄ μ¬μ©ν μ μμ΅λλ€.
π μ°Έκ³ μλ£
Advanced Features: Dynamic Import | Next.js
'π‘ issue' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
storybook μμ styled component css prop μ μ©μ΄ μλλ€λ©΄? (0) | 2023.05.15 |
---|---|
JavaScript λ‘ μμ±ν csv νμΌμμ νκΈμ΄ κΉ¨μ§λ€λ©΄? (0) | 2023.03.18 |
Safari λΈλΌμ°μ window.open block μ΄μ (0) | 2022.11.26 |
-webkit-overflow-scrolling μμ±κ³Ό stacking context μ΄μ (0) | 2022.07.04 |
Safari λΈλΌμ°μ scroll-behavior μ΄μ (0) | 2022.06.11 |
π¬ λκΈ