useContext & Provider

Context API

λ§Žμ€ μ»΄ν¬λ„ŒνŠΈμ—μ„œ μ‚¬μš©λ˜λŠ” 변경이 잘 μΌμ–΄λ‚˜μ§€ μ•ŠλŠ” 값에 λŒ€ν•΄ μ»¨ν…μŠ€νŠΈ API μ‚¬μš©μ„ κ³ λ €

  • μ»¨ν…μŠ€νŠΈ API: μ»΄ν¬λ„ŒνŠΈ 트리의 λͺ¨λ“  ν•˜μœ„ νŠΈλ¦¬μ— 값을 μ œκ³΅ν•˜κΈ° μœ„ν•œ 방법

  • μ»¨ν…μŠ€νŠΈ 객체: React.createContext() 둜 생성됨, ν”„λ‘œλ°”μ΄λ”/μ†ŒλΉ„μžλ₯Ό ν¬ν•¨ν•œλ‹€.

  • Provider μ»΄ν¬λ„ŒνŠΈ: μ»¨ν…μŠ€νŠΈλ₯Ό μ œκ³΅ν•˜λ©°, ν•˜μœ„ μ»΄ν¬λ„ŒνŠΈκ°€ μ»¨ν…μŠ€νŠΈ 값을 ꡬ독할 수 μžˆλ„λ‘ 함

  • useContext ν›…: μ»¨ν…μŠ€νŠΈ 값을 μ†ŒλΉ„ν•˜κΈ° μœ„ν•œ ν›…μœΌλ‘œ, μ»¨ν…μŠ€νŠΈ 객체λ₯Ό 인수둜 λ°›μ•„ ν˜„μž¬ μ»¨ν…μŠ€νŠΈ 값을 λ°˜ν™˜ν•¨

λΆˆν•„μš”ν•œ λ¦¬λ Œλ”λ§ λ°©μ§€ν•˜κΈ°

Context 값을 μ†ŒλΉ„ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈ 외에 ν•˜μœ„ μ»΄ν¬λ„ŒνŠΈλ“€μ€ λ¦¬λ Œλ”λ§ λ˜μ§€ μ•ŠλŠ”λ‹€.

μ»€μŠ€ν…€ μ»΄ν¬λ„ŒνŠΈμ—μ„œ μžμ† μ»΄ν¬λ„ŒνŠΈλ₯Ό λ¦¬λ Œλ”λ§ν•˜μ§€ μ•Šκ²Œ ν•˜κΈ° μœ„ν•΄ children 프둭을 μ‚¬μš©ν•˜λΌ.

  • Provider μ»΄ν¬λ„ŒνŠΈκ°€ ν•˜μœ„ μ»΄ν¬λ„ŒνŠΈλ“€μ„ children ν”„λ‘œνΌν‹°λ‘œ μ ‘κ·Όν•˜μ—¬ Provider μ»΄ν¬λ„ŒνŠΈ μ•ˆμ—μ„œ μƒνƒœλ₯Ό 갱신해도 children ν”„λ‘œνΌν‹°λŠ” λ³€κ²½λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έ

    • children은 μ—¬μ „νžˆ 같은 객체

  • Context 객체둜 묢인 ν”„λ‘œνΌν‹°λ“€μ€ 이 쀑 ν•˜λ‚˜λΌλ„ λ³€κ²½λ˜λ©΄, λ³€κ²½λœ κ°’κ³Ό λ¬΄κ΄€ν•œ μ»΄ν¬λ„ŒνŠΈλ„ λ¦¬λ Œλ”λ§ λœλ‹€.

    • μ»¨ν…μŠ€νŠΈλ₯Ό μ‚¬μš©ν•˜λŠ” 'λͺ¨λ“ ' μ»΄ν¬λ„ŒνŠΈκ°€ λ¦¬λ Œλ”λ§λœλ‹€.

    • ν”„λ‘œλ°”μ΄λ”μ— λ„˜κΈ°λŠ” μ»¨ν…μŠ€νŠΈ κ°’(객체)이 λ‹€μ‹œ μƒμ„±λ˜μ–΄ ν• λ‹Ήλ˜κΈ° λ•Œλ¬Έ

    • 이런 이유둜 ν”„λ‘œλ°”μ΄λ” μ»΄ν¬λ„ŒνŠΈμ˜ λΆ€λͺ¨κ°€ λ¦¬λ Œλ”λ§λ˜μ–΄λ„ λ™μΌν•˜κ²Œ λ¦¬λ Œλ”λ§λœλ‹€.

      • 이 μ΄μŠˆλŠ” useMemo둜 μ»¨ν…μŠ€νŠΈ 값을 감싸면 ν•΄κ²° κ°€λŠ₯ν•˜λ‹€.

  • μ—¬λŸ¬ ν”„λ‘œλ°”μ΄λ”λ₯Ό 톡해 μ»¨ν…μŠ€νŠΈ 값을 λΆ„ν• ν•˜λŠ”κ²ƒλ„ 방법이닀.

    • ν•¨κ»˜ μ†ŒλΉ„λ˜λŠ” κ°’λ“€λ‘œ 묢어라

    • ν•¨κ»˜ μ†ŒλΉ„λ˜λŠ” κ²½μš°κ°€ λ“œλ¬Έ 값에 λŒ€ν•΄μ„œλŠ” μ—¬λŸ¬ 개의 μ»¨ν…μŠ€νŠΈλ‘œ λΆ„λ¦¬ν•˜λŠ”κ²ƒμ„ κ³ λ €

  • ν”„λ‘œλ°”μ΄λ” 쀑첩이 심해지면(wrapper hell) μ—¬λŸ¬ ν”„λ‘œλ°”μ΄λ”λ₯Ό ν•œ 곳에 κ·Έλ£Ήν™”ν•΄μ£ΌλŠ” μ»€μŠ€ν…€ ν”„λ‘œλ°”μ΄λ”λ₯Ό λ§Œλ“€λ©΄ λœλ‹€.

Last updated