--- id: wiki-2026-0508-render-props title: Render Props category: 10_Wiki/Topics status: needs_review canonical_id: self aliases: [] duplicate_of: none source_trust_level: A confidence_score: 0.92 tags: [auto-consolidated, technical-documentation] raw_sources: [] last_reinforced: 2026-05-08 github_commit: pending inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08) tech_stack: language: unspecified framework: unspecified --- # [[Render Props|Render Props]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) Render PropsλŠ” Reactμ—μ„œ ν•¨μˆ˜ ν˜•νƒœμ˜ μžμ‹(child)μ΄λ‚˜ prop을 μ‚¬μš©ν•˜μ—¬ λ Œλ”λ§ν•  λ‚΄μš©μ„ κ²°μ •ν•¨μœΌλ‘œμ¨ λ‘œμ§μ„ μ΅œλŒ€ν•œ μž¬μ‚¬μš©ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈ 섀계 νŒ¨ν„΄μž…λ‹ˆλ‹€ [1]. 이 νŒ¨ν„΄μ€ μ»΄ν¬λ„ŒνŠΈμ˜ μ™Έν˜•μ„ κ°•μ œν•˜μ§€ μ•Šκ³  μƒνƒœμ™€ κ·œμΉ™λ§Œ μ œκ³΅ν•˜μ—¬ μ†ŒλΉ„μžκ°€ UI ꡬ쑰λ₯Ό 직접 μ œμ–΄ν•  수 있게 ν•©λ‹ˆλ‹€ [2]. μƒˆλ‘œμš΄ APIλ₯Ό μΆ”κ°€ν•˜μ§€ μ•Šκ³ λ„ κ³ κΈ‰ μ‚¬μš©μžμ—κ²Œ μ™„μ „ν•œ μ œμ–΄κΆŒμ„ λΆ€μ—¬ν•˜λŠ” 'νƒˆμΆœκ΅¬(escape hatch)' 역할을 ν•˜μ—¬ μœ μ—°ν•˜κ³  ν™•μž₯ κ°€λŠ₯ν•œ UI ꡬ좕에 κΈ°μ—¬ν•©λ‹ˆλ‹€ [3, 4]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) - **μž‘λ™ 원리 및 λͺ©μ **: Render Props νŒ¨ν„΄μ€ μ»΄ν¬λ„ŒνŠΈμ˜ λ Œλ”λ§ λ©”μ»€λ‹ˆμ¦˜μ„ ν•¨μˆ˜λ‘œ κ΅¬ν˜„ν•˜μ—¬ μžμ‹μœΌλ‘œ 전달(Function as a child/prop)ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€ [1]. μ»΄ν¬λ„ŒνŠΈκ°€ μ–΄λ–»κ²Œ 보여야 ν• μ§€ μ§€μ‹œν•˜λŠ” λŒ€μ‹ , λ‚΄λΆ€ μƒνƒœμ™€ κ·œμΉ™μ„ μ „λ‹¬ν•˜κ³  λ Œλ”λ§ ꡬ쑰 μžμ²΄λŠ” 이λ₯Ό μ‚¬μš©ν•˜λŠ” μ†ŒλΉ„μžκ°€ κ²°μ •ν•˜κ²Œ ν•˜μ—¬ μ΅œλŒ€ν•œμ˜ 둜직 μž¬μ‚¬μš©(Maximum [[Logic|Logic]] reuse)을 κ°€λŠ₯ν•˜κ²Œ ν•©λ‹ˆλ‹€ [1, 2]. - **νŠΉμ§•κ³Ό μž₯점**: 이 νŒ¨ν„΄μ€ κ²°μ½” ꡬ식(outdated) 기술이 μ•„λ‹ˆλ©°, νŠΉμˆ˜ν™”(specialized)된 λͺ©μ μ„ μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€ [3]. 일반적인 JSX 방식과 Render Propsλ₯Ό λͺ¨λ‘ μ§€μ›ν•˜λŠ” ν•˜μ΄λΈŒλ¦¬λ“œ 접근법을 κ΅¬μ„±ν•˜λ©΄, μ΄ˆλ³΄μžλŠ” κΉ”λ”ν•œ JSXλ₯Ό μ‚¬μš©ν•˜κ³  κ³ κΈ‰ μ‚¬μš©μžλŠ” λ‚΄λΆ€ μƒνƒœμ— μ ‘κ·Όν•΄ μ™„μ „ν•œ μ œμ–΄κΆŒ(Total Control)을 얻을 수 μžˆμŠ΅λ‹ˆλ‹€ [4]. 이λ₯Ό 톡해 APIλ₯Ό λΆˆν•„μš”ν•˜κ²Œ λΆ„κΈ°ν•˜κ±°λ‚˜ κΈ°μ‘΄ μ½”λ“œλ₯Ό λ§κ°€λœ¨λ¦¬μ§€ μ•Šκ³ λ„ μœ μ—°μ„±μ„ 확보할 수 μžˆμŠ΅λ‹ˆλ‹€ [4, 5]. - **μ‹€μ œ κ΅¬ν˜„ 사둀**: `[[styled-components|styled-components]]` 라이브러리의 `ThemeConsumer` μ»΄ν¬λ„ŒνŠΈλŠ” 이 νŒ¨ν„΄μ„ ν™œμš©ν•˜μ—¬ λ Œλ”λ§ 쀑 ν…Œλ§ˆ 객체에 λ™μ μœΌλ‘œ μ ‘κ·Όν•˜λ„λ‘ μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€ [6]. λ˜ν•œ Accordionμ΄λ‚˜ File input 같은 λ³΅μž‘ν•œ UI μ»΄ν¬λ„ŒνŠΈμ—μ„œλ„ μ‚¬μš©μžκ°€ λ‚΄λΆ€ μƒνƒœ(예: `isOpen`)λ₯Ό 인자둜 λ„˜κ²¨λ°›μ•„ λ²„νŠΌμ΄λ‚˜ 미리보기 ν™”λ©΄μ˜ λ§ˆν¬μ—…μ„ μ›ν•˜λŠ” λŒ€λ‘œ κ΅¬μ„±ν•˜κ²Œ λ§Œλ“€ λ•Œ κ·Έ μ§„κ°€λ₯Ό λ°œνœ˜ν•©λ‹ˆλ‹€ [4, 7, 8]. - **주의점 및 ν•œκ³„**: μ œμ–΄κΆŒμ„ μ‚¬μš©μžμ—κ²Œ λ„˜κ²¨μ£ΌκΈ° λ•Œλ¬Έμ—, μ‚¬μš©μžλŠ” ARIA μ ‘κ·Όμ„± 속성(A11y), λ²„νŠΌμ˜ `type` μ§€μ •, ν‚€λ³΄λ“œ λ„€λΉ„κ²Œμ΄μ…˜ μ œμ–΄ λ“±μ˜ μƒν˜Έμž‘μš© μš”μ†Œλ₯Ό 직접 κ΅¬ν˜„ν•΄μ•Ό ν•˜λŠ” μ±…μž„μ„ μ§€κ²Œ λ©λ‹ˆλ‹€ [4, 5]. μ•„μšΈλŸ¬ 둜직이 μ»΄ν¬λ„ŒνŠΈμ˜ μ»¨ν…μŠ€νŠΈ(Context), ν›…(Hooks), Render Props μ „λ°˜μ— ν©μ–΄μ§€κ²Œ 되면 버그λ₯Ό μΆ”μ ν•˜κΈ° μ–΄λ €μ›Œμ§€λŠ” 단점이 μžˆμŠ΅λ‹ˆλ‹€ [9]. λ”°λΌμ„œ Render PropsλŠ” κ·Έ μžμ²΄κ°€ λͺ©μ μ΄ μ•„λ‹ˆλΌ μœ μ—°ν•œ API 섀계λ₯Ό λ•λŠ” μ—¬λŸ¬ 도ꡬ 쀑 ν•˜λ‚˜λ‘œ μ‹ μ€‘ν•˜κ²Œ μ‚¬μš©λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€ [10]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & Updates) No trade-offs available. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[Compound Components|Compound Components]], Headless Components, [[Component API Design|Component API Design]] - **Projects/Contexts:** [[React Component Architecture|React Component Architecture]], [[styled-components|styled-components]] - **Contradictions/Notes:** μ†ŒμŠ€λŠ” Render Props νŒ¨ν„΄μ΄ 낑은 νŒ¨ν„΄μ΄ μ•„λ‹ˆλ©°, [[Compound Components|Compound Components]]λ‚˜ Hooks와 ν•¨κ»˜ λ³΅μž‘ν•œ UI 및 μœ μ—°ν•œ API 섀계λ₯Ό μœ„ν•΄ 적절히 ν˜Όν•©ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆλŠ” κ°•λ ₯ν•œ λ¬΄κΈ°μž„μ„ κ°•μ‘°ν•©λ‹ˆλ‹€ [3, 10]. --- *Last updated: 2026-04-26* ## πŸ€– LLM ν™œμš© 힌트 (How to Use This Knowledge) **μ–Έμ œ 이 지식을 μ“°λŠ”κ°€:** - *(TODO)* **μ–Έμ œ μ“°λ©΄ μ•ˆ λ˜λŠ”κ°€:** - *(TODO)* ## πŸ§ͺ 검증 μƒνƒœ (Validation) - **정보 μƒνƒœ:** needs_review - **좜처 신뒰도:** A - **κ²€ν†  이유:** *(P-Reinforce Phase 1 μžλ™ μ •κ·œν™”. λ³Έλ¬Έ 검증 ν•„μš”.)* ## 🧬 쀑볡 검사 (Duplicate Check) - **κΈ°μ‘΄ μœ μ‚¬ λ¬Έμ„œ:** *(TODO: μΈλ±μ„œ ν΄λŸ¬μŠ€ν„° 리포트 μ°Έμ‘°)* - **처리 방식:** UPDATE (μžλ™ μ •κ·œν™”) - **처리 이유:** Phase 1 μ •κ·œν™” β€” μ˜› ν…œν”Œλ¦Ώ/λˆ„λ½ ν•„λ“œ 보강. ## πŸ•“ λ³€κ²½ 이λ ₯ (Changelog) | λ‚ μ§œ | λ³€κ²½ λ‚΄μš© | 처리 방식 | 신뒰도 | |------|-----------|-----------|--------| | 2026-05-08 | P-Reinforce Phase 1 μ •κ·œν™” (frontmatter + 헀더 ν‘œμ€€ν™”) | UPDATE | A | ## πŸ’» μ½”λ“œ νŒ¨ν„΄ (Code Patterns) **νŒ¨ν„΄ 1:** *(TODO: 이 ν”„λ‘œμ νŠΈ μ»¨λ²€μ…˜ λ°˜μ˜ν•œ ꡬ쑰 μŠ€μΌˆλ ˆν†€)* ```text # TODO ``` ## πŸ€” μ˜μ‚¬κ²°μ • κΈ°μ€€ (Decision Criteria) **선택 Aλ₯Ό 써야 ν•  λ•Œ:** - *(TODO)* **선택 Bλ₯Ό 써야 ν•  λ•Œ:** - *(TODO)* **κΈ°λ³Έκ°’:** > *(TODO)* ## ❌ μ•ˆν‹°νŒ¨ν„΄ (Anti-Patterns) - **[μ•ˆν‹°νŒ¨ν„΄]:** *(TODO: 무엇을 ν•˜λ©΄ μ•ˆ λ˜λŠ”κ°€ + 이유 + λŒ€μ‹  무엇을)*