Reactμ Children μ νΈλ¦¬ν°λ₯Ό νμ©ν ν¨μ¨μ μΈ μμ μλ¦¬λ¨ΌνΈ μ‘°μ λ° λ°λ³΅ λ°©λ²μ νμν©λλ€. λμ μ΄κ³ νμ₯ κ°λ₯ν React μ±μ λ§λ€κΈ° μν λͺ¨λ² μ¬λ‘μ κ³ κΈ κΈ°μ μ λ°°μ°μΈμ.
React Children μ νΈλ¦¬ν° λ§μ€ν°νκΈ°: μ’ ν© κ°μ΄λ
Reactμ μ»΄ν¬λνΈ λͺ¨λΈμ λ§€μ° κ°λ ₯νμ¬, κ°λ°μλ€μ΄ μ¬μ¬μ© κ°λ₯ν κ΅¬μ± μμλ‘ λ³΅μ‘ν UIλ₯Ό ꡬμΆν μ μκ² ν΄μ€λλ€. μ΄ λͺ¨λΈμ μ€μ¬μλ μ»΄ν¬λνΈμ μ¬λ νκ·Έμ λ«λ νκ·Έ μ¬μ΄μ μ λ¬λλ μ리먼νΈμΈ 'children'μ΄λΌλ κ°λ
μ΄ μμ΅λλ€. κ°λ¨ν΄ 보μ΄μ§λ§, μ΄λ¬ν childrenμ ν¨κ³Όμ μΌλ‘ κ΄λ¦¬νκ³ μ‘°μνλ κ²μ λμ μ΄κ³ μ μ°ν μ ν리μΌμ΄μ
μ λ§λλ λ° λ§€μ° μ€μν©λλ€. Reactλ μ΄ λͺ©μ μ μν΄ νΉλ³ν μ€κ³λ React.Children API μλμ μ μ©ν μ νΈλ¦¬ν° λͺ¨μμ μ 곡ν©λλ€. μ΄ μ’
ν© κ°μ΄λμμλ μ΄λ¬ν μ νΈλ¦¬ν°λ€μ μμΈν μ΄ν΄λ³΄κ³ , Reactμμ μμ μλ¦¬λ¨ΌνΈ μ‘°μ λ° λ°λ³΅μ λ§μ€ν°νλ λ° λμμ΄ λλ μ€μ μμ μ λͺ¨λ² μ¬λ‘λ₯Ό μ 곡ν©λλ€.
React Children μ΄ν΄νκΈ°
Reactμμ 'children'μ μ»΄ν¬λνΈκ° μ¬λ νκ·Έμ λ«λ νκ·Έ μ¬μ΄μμ λ°λ μ½ν μΈ λ₯Ό μλ―Έν©λλ€. μ΄ μ½ν μΈ λ κ°λ¨ν ν μ€νΈλΆν° 볡μ‘ν μ»΄ν¬λνΈ κ³μΈ΅ ꡬ쑰μ μ΄λ₯΄κΈ°κΉμ§ 무μμ΄λ λ μ μμ΅λλ€. λ€μ μμ λ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€:
<MyComponent>
<p>This is a child element.</p>
<AnotherComponent />
</MyComponent>
MyComponent λ΄λΆμμ props.children μμ±μ <p> μ리먼νΈμ <AnotherComponent /> μΈμ€ν΄μ€λΌλ λ κ°μ§ μ리먼νΈλ₯Ό ν¬ν¨νκ² λ©λλ€. νμ§λ§ props.childrenμ μ§μ μ κ·Όνκ³ μ‘°μνλ κ²μ νΉν 볡μ‘ν ꡬ쑰λ₯Ό λ€λ£° λ κΉλ€λ‘μΈ μ μμ΅λλ€. λ°λ‘ μ΄ μ§μ μμ React.Children μ νΈλ¦¬ν°κ° μ μ©νκ² μ¬μ©λ©λλ€.
React.Children API: μμ κ΄λ¦¬λ₯Ό μν ν΄ν·
React.Children APIλ λΆν¬λͺ
ν λ°μ΄ν° κ΅¬μ‘°μΈ props.childrenμ λ°λ³΅νκ³ λ³ννκΈ° μν μ μ λ©μλ μΈνΈλ₯Ό μ 곡ν©λλ€. μ΄λ¬ν μ νΈλ¦¬ν°λ props.childrenμ μ§μ μ κ·Όνλ κ²λ³΄λ€ λ κ²¬κ³ νκ³ νμ€νλ λ°©μμΌλ‘ childrenμ μ²λ¦¬νλ λ°©λ²μ μ 곡ν©λλ€.
1. React.Children.map(children, fn, thisArg?)
React.Children.map()μ μλ§λ κ°μ₯ μμ£Ό μ¬μ©λλ μ νΈλ¦¬ν°μΌ κ²μ
λλ€. μ΄λ νμ€ JavaScriptμ Array.prototype.map() λ©μλμ μ μ¬ν©λλ€. children propμ κ° μ§κ³ μμμ λν΄ λ°λ³΅νλ©΄μ μ 곡λ ν¨μλ₯Ό κ° μμμκ² μ μ©ν©λλ€. κ·Έ κ²°κ³Όλ λ³νλ μμλ€μ ν¬ν¨νλ μλ‘μ΄ μ»¬λ μ
(μΌλ°μ μΌλ‘ λ°°μ΄)μ
λλ€. κ²°μ μ μΌλ‘, μ΄ λ©μλλ μμλ λ κΉμ νμ μμκ° μλ *μ§κ³* μμμκ²λ§ μλν©λλ€.
μμ : λͺ¨λ μ§κ³ μμμκ² κ³΅ν΅ ν΄λμ€ μ΄λ¦ μΆκ°νκΈ°
function MyComponent(props) {
return (
<div className="my-component">
{React.Children.map(props.children, (child) => {
// React.isValidElement()λ childκ° λ¬Έμμ΄μ΄λ μ«μμΌ λ μ€λ₯λ₯Ό λ°©μ§ν©λλ€.
if (React.isValidElement(child)) {
return React.cloneElement(child, {
className: child.props.className ? child.props.className + ' common-class' : 'common-class',
});
} else {
return child;
}
})}
</div>
);
}
// μ¬μ©λ²:
<MyComponent>
<div className="existing-class">Child 1</div>
<span>Child 2</span>
</MyComponent>
μ΄ μμ μμ React.Children.map()μ MyComponentμ μμλ€μ λ°λ³΅ν©λλ€. κ° μμμ λν΄ React.cloneElement()λ₯Ό μ¬μ©νμ¬ μ리먼νΈλ₯Ό 볡μ νκ³ "common-class"λΌλ ν΄λμ€ μ΄λ¦μ μΆκ°ν©λλ€. μ΅μ’
μΆλ ₯μ λ€μκ³Ό κ°μ΅λλ€:
<div className="my-component">
<div className="existing-class common-class">Child 1</div>
<span className="common-class">Child 2</span>
</div>
React.Children.map() μ¬μ© μ μ€μ κ³ λ €μ¬ν:
- Key prop: μμλ€μ λ§€ννκ³ μλ‘μ΄ μ리먼νΈλ₯Ό λ°νν λ, νμ κ° μ리먼νΈκ° κ³ μ ν
keypropμ κ°λλ‘ ν΄μΌ ν©λλ€. μ΄λ Reactκ° DOMμ ν¨μ¨μ μΌλ‘ μ λ°μ΄νΈνλ λ° λμμ΄ λ©λλ€. nullλ°ννκΈ°: λ§€ν ν¨μμμnullμ λ°ννμ¬ νΉμ μμμ νν°λ§ν μ μμ΅λλ€.- μ리먼νΈκ° μλ μμ μ²λ¦¬νκΈ°: μμμ λ¬Έμμ΄, μ«μ, λλ
null/undefinedμΌ μ μμ΅λλ€.React.isValidElement()λ₯Ό μ¬μ©νμ¬ React μ리먼νΈλ§ 볡μ νκ³ μμ νλλ‘ ν΄μΌ ν©λλ€.
2. React.Children.forEach(children, fn, thisArg?)
React.Children.forEach()λ React.Children.map()κ³Ό μ μ¬νμ§λ§ μλ‘μ΄ μ»¬λ μ
μ λ°ννμ§ μμ΅λλ€. λμ , λ¨μν μμλ€μ λ°λ³΅νλ©° κ° μμμ λν΄ μ 곡λ ν¨μλ₯Ό μ€νν©λλ€. μ΄λ μ£Όλ‘ λΆμ ν¨κ³Όλ₯Ό μννκ±°λ μμμ λν μ 보λ₯Ό μμ§νλ λ° μ¬μ©λ©λλ€.
μμ : children λ΄μ <li> μλ¦¬λ¨ΌνΈ κ°μ μΈκΈ°
function MyComponent(props) {
let liCount = 0;
React.Children.forEach(props.children, (child) => {
if (child && child.type === 'li') {
liCount++;
}
});
return (
<div>
<p>Number of <li> elements: {liCount}</p>
{props.children}
</div>
);
}
// μ¬μ©λ²:
<MyComponent>
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
<p>Some other content</p>
</MyComponent>
μ΄ μμ μμ React.Children.forEach()λ μμλ€μ λ°λ³΅νκ³ λ°κ²¬λ κ° <li> μ리먼νΈμ λν΄ liCountλ₯Ό μ¦κ°μν΅λλ€. κ·Έλ° λ€μ μ»΄ν¬λνΈλ <li> μ리먼νΈμ μλ₯Ό λ λλ§ν©λλ€.
React.Children.map()κ³Ό React.Children.forEach()μ μ£Όμ μ°¨μ΄μ :
React.Children.map()μ μμ λ μμλ€μ μλ‘μ΄ λ°°μ΄μ λ°ννμ§λ§,React.Children.forEach()λ μ무κ²λ λ°ννμ§ μμ΅λλ€.React.Children.map()μ μΌλ°μ μΌλ‘ μμμ λ³ννλ λ° μ¬μ©λκ³ ,React.Children.forEach()λ λΆμ ν¨κ³Όλ μ 보 μμ§μ μ¬μ©λ©λλ€.
3. React.Children.count(children)
React.Children.count()λ children prop λ΄μ μ§κ³ μμ μλ₯Ό λ°νν©λλ€. μ΄λ μμ 컬λ μ
μ ν¬κΈ°λ₯Ό κ²°μ νλ λ° μ μ©ν κ°λ¨ν μ νΈλ¦¬ν°μ
λλ€.
μμ : μμ μ νμνκΈ°
function MyComponent(props) {
const childCount = React.Children.count(props.children);
return (
<div>
<p>This component has {childCount} children.</p>
{props.children}
</div>
);
}
// μ¬μ©λ²:
<MyComponent>
<div>Child 1</div>
<span>Child 2</span>
<p>Child 3</p>
</MyComponent>
μ΄ μμ μμ React.Children.count()λ 3μ λ°ννλλ°, μ΄λ MyComponentμ μΈ κ°μ μ§κ³ μμμ΄ μ λ¬λμκΈ° λλ¬Έμ
λλ€.
4. React.Children.toArray(children)
React.Children.toArray()λ (λΆν¬λͺ
ν λ°μ΄ν° ꡬ쑰μΈ) children propμ νμ€ JavaScript λ°°μ΄λ‘ λ³νν©λλ€. μ΄λ μ λ ¬μ΄λ νν°λ§κ³Ό κ°μ΄ μμμ λν΄ λ°°μ΄ νΉμ μμ
μ μνν΄μΌ ν λ μ μ©ν μ μμ΅λλ€.
μμ : μμ μμ λ€μ§κΈ°
function MyComponent(props) {
const childrenArray = React.Children.toArray(props.children);
const reversedChildren = childrenArray.reverse();
return (
<div>
{reversedChildren}
</div>
);
}
// μ¬μ©λ²:
<MyComponent>
<div>Child 1</div>
<span>Child 2</span>
<p>Child 3</p>
</MyComponent>
μ΄ μμ μμ React.Children.toArray()λ μμλ€μ λ°°μ΄λ‘ λ³νν©λλ€. κ·Έλ° λ€μ Array.prototype.reverse()λ₯Ό μ¬μ©νμ¬ λ°°μ΄μ μμλ₯Ό λ€μ§κ³ , λ€μ§ν μμλ€μ λ λλ§ν©λλ€.
React.Children.toArray() μ¬μ© μ μ€μ κ³ λ €μ¬ν:
- κ²°κ³Ό λ°°μ΄μ κ° μ리먼νΈμλ μλ³Έ ν€μμ νμλκ±°λ μλμΌλ‘ μμ±λ ν€κ° ν λΉλ©λλ€. μ΄λ λ°°μ΄ μ‘°μ νμλ Reactκ° DOMμ ν¨μ¨μ μΌλ‘ μ λ°μ΄νΈν μ μλλ‘ λ³΄μ₯ν©λλ€.
- μ΄λ€ λ°°μ΄ μμ μ΄λ μνν μ μμ§λ§, μμ λ°°μ΄μ μ§μ μμ νλ©΄ μ£Όμνμ§ μμ κ²½μ° μκΈ°μΉ μμ λμμ΄ λ°μν μ μμμ κΈ°μ΅νμΈμ.
κ³ κΈ κΈ°μ λ° λͺ¨λ² μ¬λ‘
1. μμ μμ μ μν React.cloneElement() μ¬μ©
μμ μ리먼νΈμ μμ±μ μμ ν΄μΌ ν λλ μΌλ°μ μΌλ‘ React.cloneElement()λ₯Ό μ¬μ©νλ κ²μ΄ μ’μ΅λλ€. μ΄ ν¨μλ κΈ°μ‘΄ μ리먼νΈλ₯Ό κΈ°λ°μΌλ‘ μλ‘μ΄ React μ리먼νΈλ₯Ό μμ±νμ¬, μλ³Έ μ리먼νΈλ₯Ό μ§μ λ³κ²½νμ§ μκ³ λ μλ‘μ΄ propμ μΆκ°νκ±°λ μ¬μ μν μ μκ² ν΄μ€λλ€. μ΄λ λΆλ³μ±μ μ μ§νκ³ μκΈ°μΉ μμ λΆμ ν¨κ³Όλ₯Ό λ°©μ§νλ λ° λμμ΄ λ©λλ€.
μμ : λͺ¨λ μμμκ² νΉμ prop μΆκ°νκΈ°
function MyComponent(props) {
return (
<div>
{React.Children.map(props.children, (child) => {
if (React.isValidElement(child)) {
return React.cloneElement(child, { customProp: 'Hello from MyComponent' });
} else {
return child;
}
})}
</div>
);
}
// μ¬μ©λ²:
<MyComponent>
<div>Child 1</div>
<span>Child 2</span>
</MyComponent>
μ΄ μμ μμ React.cloneElement()λ κ° μμ μ리먼νΈμ customPropμ μΆκ°νλ λ° μ¬μ©λ©λλ€. κ²°κ³Ό μ리먼νΈλ€μ props κ°μ²΄ λ΄μμ μ΄ propμ μ¬μ©ν μ μκ² λ©λλ€.
2. λΆν λ μμ(Fragmented Children) λ€λ£¨κΈ°
React Fragment(<></> λλ <React.Fragment></React.Fragment>)λ₯Ό μ¬μ©νλ©΄ μΆκ°μ μΈ DOM λ
Έλλ₯Ό μμ±νμ§ μκ³ μ¬λ¬ μμμ κ·Έλ£Ήνν μ μμ΅λλ€. React.Children μ νΈλ¦¬ν°λ νλκ·Έλ¨ΌνΈλ₯Ό μμ°μ€λ½κ² μ²λ¦¬νμ¬, νλκ·Έλ¨ΌνΈ λ΄μ κ° μμμ κ°λ³ μμμΌλ‘ μ·¨κΈν©λλ€.
μμ : Fragment λ΄μ μμ λ°λ³΅νκΈ°
function MyComponent(props) {
React.Children.forEach(props.children, (child) => {
console.log(child);
});
return <div>{props.children}</div>;
}
// μ¬μ©λ²:
<MyComponent>
<>
<div>Child 1</div>
<span>Child 2</span>
</
<p>Child 3</p>
</MyComponent>
μ΄ μμ μμ React.Children.forEach() ν¨μλ μΈ κ°μ μμ, μ¦ <div> μ리먼νΈ, <span> μ리먼νΈ, κ·Έλ¦¬κ³ <p> μ리먼νΈλ₯Ό λ°λ³΅ν©λλ€. μ²μ λ μ리먼νΈκ° Fragmentλ‘ κ°μΈμ¬ μμμλ λΆκ΅¬νκ³ κ°κ° κ°λ³μ μΌλ‘ μ²λ¦¬λ©λλ€.
3. λ€μν μμ νμ μ²λ¦¬νκΈ°
μμ μΈκΈνλ―μ΄, μμμ React μ리먼νΈ, λ¬Έμμ΄, μ«μ, λλ null/undefinedμΌ μ μμ΅λλ€. React.Children μ νΈλ¦¬ν° ν¨μ λ΄μμ μ΄λ¬ν λ€μν νμ
μ μ μ νκ² μ²λ¦¬νλ κ²μ΄ μ€μν©λλ€. React.isValidElement()λ₯Ό μ¬μ©νλ κ²μ React μ리먼νΈμ λ€λ₯Έ νμ
μ ꡬλ³νλ λ° λ§€μ° μ€μν©λλ€.
μμ : μμ νμ μ λ°λΌ λ€λ₯Έ μ½ν μΈ λ λλ§νκΈ°
function MyComponent(props) {
return (
<div>
{React.Children.map(props.children, (child) => {
if (React.isValidElement(child)) {
return <div className="element-child">{child}</div>;
} else if (typeof child === 'string') {
return <div className="string-child">String: {child}</div>;
} else if (typeof child === 'number') {
return <div className="number-child">Number: {child}</div>;
} else {
return null;
}
})}
</div>
);
}
// μ¬μ©λ²:
<MyComponent>
<div>Child 1</div>
"This is a string child"
123
</MyComponent>
μ΄ μμ λ λ€μν μμ νμ
μ νΉμ ν΄λμ€ μ΄λ¦μΌλ‘ λ λλ§νμ¬ μ²λ¦¬νλ λ°©λ²μ 보μ¬μ€λλ€. μμμ΄ React μ리먼νΈμ΄λ©΄ "element-child" ν΄λμ€λ₯Ό κ°μ§ <div>λ‘ κ°μΈμ§λλ€. λ¬Έμμ΄μ΄λ©΄ "string-child" ν΄λμ€λ₯Ό κ°μ§ <div>λ‘, μ«μμ΄λ©΄ "number-child"λ‘ κ°μΈμ§λλ€.
4. μμμ κΉμ μν (μ£Όμν΄μ μ¬μ©νμΈμ!)
React.Children μ νΈλ¦¬ν°λ μ§κ³ μμμλ§ μλν©λλ€. μ 체 μ»΄ν¬λνΈ νΈλ¦¬(μμ£Ό λ° λ κΉμ νμ μμ ν¬ν¨)λ₯Ό μνν΄μΌ νλ κ²½μ° μ¬κ·μ μΈ μν ν¨μλ₯Ό ꡬνν΄μΌ ν©λλ€. κ·Έλ¬λ μ΄λ κ² νλ κ²μ κ³μ° λΉμ©μ΄ λ§μ΄ λ€ μ μκ³ μ»΄ν¬λνΈ κ΅¬μ‘°μ μ€κ³ κ²°ν¨μ λνλΌ μ μμΌλ―λ‘ λ§€μ° μ£Όμν΄μΌ ν©λλ€.
μμ : μμμ μ¬κ·μ μν
function traverseChildren(children, callback) {
React.Children.forEach(children, (child) => {
callback(child);
if (React.isValidElement(child) && child.props.children) {
traverseChildren(child.props.children, callback);
}
});
}
function MyComponent(props) {
traverseChildren(props.children, (child) => {
console.log(child);
});
return <div>{props.children}</div>;
}
// μ¬μ©λ²:
<MyComponent>
<div>
<span>Child 1</span>
<p>Child 2</p>
</div>
<p>Child 3</p>
</MyComponent>
μ΄ μμ λ μμλ€μ μ¬κ·μ μΌλ‘ λ°λ³΅νλ traverseChildren() ν¨μλ₯Ό μ μν©λλ€. κ° μμμ λν΄ μ 곡λ μ½λ°±μ νΈμΆν λ€μ, μμ μμ μκ² λ λ€λ₯Έ μμμ΄ μλ κ²½μ° μ¬κ·μ μΌλ‘ μμ μ νΈμΆν©λλ€. λ€μ νλ² κ°μ‘°νμ§λ§, μ΄ μ κ·Ό λ°©μμ κΌ νμν κ²½μ°μλ§ λλ¬Όκ² μ¬μ©νμΈμ. κΉμ μνλ₯Ό νΌν μ μλ λμμ μΈ μ»΄ν¬λνΈ μ€κ³λ₯Ό κ³ λ €νμμμ€.
κ΅μ ν(i18n)μ React Children
μ μΈκ³ μ¬μ©μλ₯Ό μν μ ν리μΌμ΄μ
μ ꡬμΆν λ React.Children μ νΈλ¦¬ν°κ° κ΅μ ν λΌμ΄λΈλ¬λ¦¬μ μ΄λ»κ² μνΈ μμ©νλμ§ κ³ λ €ν΄μΌ ν©λλ€. μλ₯Ό λ€μ΄, react-intlμ΄λ i18nextμ κ°μ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νλ κ²½μ°, μ§μνλ λ¬Έμμ΄μ΄ μ¬λ°λ₯΄κ² λ λλ§λλλ‘ μμμ λ§€ννλ λ°©μμ μ‘°μ ν΄μΌ ν μ μμ΅λλ€.
μμ : react-intlκ³Ό React.Children.map() ν¨κ» μ¬μ©νκΈ°
import { FormattedMessage } from 'react-intl';
function MyComponent(props) {
return (
<div>
{React.Children.map(props.children, (child, index) => {
if (typeof child === 'string') {
// λ¬Έμμ΄ μμμ FormattedMessageλ‘ κ°μΈκΈ°
return <FormattedMessage id={`myComponent.child${index + 1}`} defaultMessage={child} />;
} else {
return child;
}
})}
</div>
);
}
// λ‘μΌμΌ νμΌ(μ: en.json, ko.json)μ λ²μ μ μ:
// {
// "myComponent.child1": "λ²μλ μμ 1",
// "myComponent.child2": "λ²μλ μμ 2"
// }
// μ¬μ©λ²:
<MyComponent>
"Child 1"
<div>Some element</div>
"Child 2"
</MyComponent>
μ΄ μμ λ λ¬Έμμ΄ μμμ react-intlμ <FormattedMessage> μ»΄ν¬λνΈλ‘ κ°μΈλ λ°©λ²μ 보μ¬μ€λλ€. μ΄λ₯Ό ν΅ν΄ μ¬μ©μμ λ‘μΌμΌμ λ°λΌ λ¬Έμμ΄ μμμ μ§μνλ λ²μ μ μ 곡ν μ μμ΅λλ€. <FormattedMessage>μ id propμ λ‘μΌμΌ νμΌμ ν€μ μΌμΉν΄μΌ ν©λλ€.
μΌλ°μ μΈ μ¬μ© μ¬λ‘
- λ μ΄μμ μ»΄ν¬λνΈ: μμμ μ½ν μΈ λ₯Ό μμμΌλ‘ λ°μ μ μλ μ¬μ¬μ© κ°λ₯ν λ μ΄μμ μ»΄ν¬λνΈ μμ±
- λ©λ΄ μ»΄ν¬λνΈ: μ»΄ν¬λνΈμ μ λ¬λ μμμ κΈ°λ°μΌλ‘ λμ μΌλ‘ λ©λ΄ νλͺ© μμ±
- ν μ»΄ν¬λνΈ: νμ± νμ κ΄λ¦¬νκ³ μ νλ μμμ λ°λΌ ν΄λΉ μ½ν μΈ λ λλ§
- λͺ¨λ¬ μ»΄ν¬λνΈ: μμμ λͺ¨λ¬ κ΄λ ¨ μ€νμΌκ³Ό κΈ°λ₯μΌλ‘ κ°μΈκΈ°
- νΌ μ»΄ν¬λνΈ: νΌ νλλ₯Ό λ°λ³΅νλ©° κ³΅ν΅ μ ν¨μ± κ²μ¬ λλ μ€νμΌ μ μ©
κ²°λ‘
React.Children APIλ React μ»΄ν¬λνΈμμ μμ μ리먼νΈλ₯Ό κ΄λ¦¬νκ³ μ‘°μνκΈ° μν κ°λ ₯ν λꡬ λͺ¨μμ
λλ€. μ΄ κ°μ΄λμμ μ€λͺ
ν μ νΈλ¦¬ν°λ₯Ό μ΄ν΄νκ³ λͺ¨λ² μ¬λ‘λ₯Ό μ μ©ν¨μΌλ‘μ¨ λ μ μ°νκ³ μ¬μ¬μ© κ°λ₯νλ©° μ μ§λ³΄μνκΈ° μ¬μ΄ μ»΄ν¬λνΈλ₯Ό λ§λ€ μ μμ΅λλ€. μ΄λ¬ν μ νΈλ¦¬ν°λ₯Ό μ μ€νκ² μ¬μ©νκ³ , νΉν ν° μ»΄ν¬λνΈ νΈλ¦¬λ₯Ό λ€λ£° λλ 볡μ‘ν μμ μ‘°μμ μ±λ₯ μν₯μ νμ κ³ λ €νμμμ€. Reactμ μ»΄ν¬λνΈ λͺ¨λΈμ νμ νμ©νμ¬ μ μΈκ³ μ¬μ©μλ₯Ό μν λλΌμ΄ μ¬μ©μ μΈν°νμ΄μ€λ₯Ό ꡬμΆνμΈμ!
μ΄λ¬ν κΈ°μ μ λ§μ€ν°ν¨μΌλ‘μ¨ λ κ²¬κ³ νκ³ μ μλ ₯ μλ React μ ν리μΌμ΄μ μ μμ±ν μ μμ΅λλ€. κ°λ° κ³Όμ μμ μ½λμ λͺ νμ±, μ±λ₯, μ μ§λ³΄μμ±μ μ°μ μνλ κ²μ μμ§ λ§μΈμ. μ¦κ±°μ΄ μ½λ© λμΈμ!