⊗jsrtPmCpPS 85 of 112 menu

React에서 하위 구성 요소에 상태 전달하기

제품 배열이 주어졌다고 가정해 보겠습니다:

const initProds = [ {id: id(), name: 'product1', cost: 100}, {id: id(), name: 'product2', cost: 200}, {id: id(), name: 'product3', cost: 300}, ];

이 배열이 Products 구성 요소에 있다고 가정합니다. 이 제품들을 구성 요소의 상태에 기록해 보겠습니다:

function Products() { const [prods, setProds] = useState(initProds); }

이제 제품들을 반복문으로 순회하고 어떤 마크업으로 출력해 보겠습니다:

function Products() { const [prods, setProds] = useState(initProds); const items = prods.map(prod => { return <div key={prod.id}> name: <span>{prod.name}</span>, cost: <span>{prod.cost}</span> </div>; }); return <div> {items} </div>; }

보시다시피, 우리의 map 반복문의 내용은 상당히 복잡합니다. 특히 나중에 제품 마크업이 더 커지게 되면 더욱 그렇습니다. 이러한 복잡성은 코드의 가독성, 이해도 및 유지 관리성을 어렵게 만듭니다.

제품 표시를 담당하는 코드를 별도의 구성 요소로 분리하는 것이 더 좋습니다. 이를 Product라고 부르겠습니다. 다음은 우리의 구성 요소 코드입니다:

function Product({ name, cost }) { return <div> name: <span>{name}</span>, cost: <span>{cost}</span> </div>; }

이제 Products 구성 요소 내부에서 map 반복문 안에 하위 구성 요소 Product를 사용해 보겠습니다:

function Products() { const [prods, setProds] = useState(initProds); const items = prods.map(prod => { return <Product key ={prod.id} name={prod.name} cost={prod.cost} />; }); return <div> {items} </div>; }

보시다시피, 이제 반복문 코드가 단순화되고 이해하기 쉬워졌습니다. 또한 이제 제품 표시는 별도의 구성 요소가 담당하며, 해당 구성 요소에서 제품 마크업을 만들고 나중에 편집할 수 있습니다.

기술적으로 보면, 상위 구성 요소가 데이터 상태를 가지고 있고, 하위 구성 요소들은 이 데이터를 props 형태로 받아 우리가 원하는 방식으로 표시하게 됩니다.

구성 요소 Users의 상태에 다음 배열이 주어졌습니다:

const initUsers = [ {id: id(), name: 'user1', surname: 'surn1', age: 30}, {id: id(), name: 'user2', surname: 'surn2', age: 31}, {id: id(), name: 'user3', surname: 'surn3', age: 32}, ];

이 배열을 반복문으로 순회하고 모든 사용자를 화면에 표시하세요. 사용자 표시를 위해 별도의 구성 요소 User를 만드세요.

한국어
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақКыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
우리는 웹사이트 운영, 분석 및 개인화를 위해 쿠키를 사용합니다. 데이터 처리는 개인정보 처리방침에 따라 이루어집니다.
모두 수락 설정 거부