React
Card 컴포넌트 만들고 props, map
코딩 화이팅
2024. 8. 17. 17:09
html 긴 부분 컴포넌트 만들기
function App(){
return (
<div className="App">
(생략)
<div className="container">
<div className="row">
<Card/>
<Card/>
<Card/>
</div>
</div>
</div>
)
}
function Card(){
return (
<div className="col-md-4">
<img src="https://codingapple1.github.io/shop/shoes1.jpg" width="80%" />
<h4>상품명</h4>
<p>상품정보</p>
</div>
)
}
- Card 라는 컴포넌트를 만들고 축약할 html을 담는다.
원래 App 컴포넌트에 있던 데이터들을 Card 컴포넌트로 데려오기
(function App 내부)
<Card shoes={shoes}/>
<Card shoes={shoes}/>
<Card shoes={shoes}/>
function Card(props){
return (
<div className="col-md-4">
<img src="https://codingapple1.github.io/shop/shoes1.jpg" width="80%" />
<h4>{ props.shoes[0].title }</h4>
<p>{ props.shoes[0].price }</p>
</div>
)
}
- shoes라는 state는 App 컴포넌트에 있었다.
- 그걸 App의 자식인 Card 컴포넌트가 쓰고 싶으면 App->Card 이렇게 props 전송해줘야된다.
- props.보낸거 쓰며 자식 컴포넌트에서 부모 컴포넌트의 state 값을 쓸 수 있다.
- 하지만 이렇게 작성하면 같은 데이터들만 보여질 것이다.
Card 컴포넌트에서 보여질 다른 데이터들 보내주기
(function App 내부)
<Card shoes={shoes[0]}/>
<Card shoes={shoes[1]}/>
<Card shoes={shoes[2]}/>
function Card(props){
return (
<div className="col-md-4">
<img src="https://codingapple1.github.io/shop/shoes1.jpg" width="80%" />
<h4>{ props.shoes.title }</h4>
<p>{ props.shoes.price }</p>
</div>
)
}
- props를 활용하면 매번 다른 내용의 모달창을 만들 수 있다.
- <Card> 쓸 때마다 각각 다른 정보를 props로 보내면 된다.
- props에 각각 다른 데이터들을 보내 다른 상품 데이터들을 볼 수 있게 한다.
- { 상품0 정보 } 이런 object 자료를 props로 보냈기 때문에 데이터 바인딩하는 문법도 좀 달라진다.
- shoes. -> 이렇게만 작성하여 각각 다른 내용의 Card를 보여줄 수 있다.
- 하지만 이렇게 작성하면 다 같은 상품 사진이 보일 것이다.
(function App 내부)
<Card shoes={shoes[0]} i={1} />
<Card shoes={shoes[1]} i={2} />
<Card shoes={shoes[2]} i={3} />
function Card(props){
return (
<div className="col-md-4">
<img src={'https://codingapple1.github.io/shop/shoes' + props.i + '.jpg'} width="80%" />
<h4>{ props.shoes.title }</h4>
<p>{ props.shoes.price }</p>
</div>
)
}
- props로 숫자를 보내어 다른 사진을 보여주게 할 수 있다.
- props.i 라고 출력하면 보냈던 0,1,2 이렇게 보냈던 숫자가 나온다.
- 이걸 shoes0.jpg 자리에 집어넣는다.
- 중간에 변수 넣고 싶다면 '문자' + '변수' + '문자' 이렇게 쓰면 됨.
- => javascript 문법
map 반복문
{
shoes.map((a, i) => {
return (
<Card shoes={shoes[i]} i={i + 1}></Card>
)
})
}
- map 반복문 안에 function 함수를 넣어도 되고 위처럼 화살표 함수를 사용해도 된다.
- 2개의 파라미터를 사용 가능하기 때문에 a,i라는 파라미터를 사용해준다.
- shoes의 데이터 수만큼 반복하기 위해 shoes.map 사용
- i 파라미터를 사용하여 0부터 사용하도록 작성해준다.