데이터 바인딩해서 컴포넌트로 뿌리기
조건
data.js로 분리되어있는 data를 바인딩해서 컴포넌트로 만들어 여러 상품을 한번에 뿌려야 한다.
풀이
function App() {
let [shoes] = useState(data);
return (
<div className="App">
<Navbar bg="dark" variant="dark">
<Container>
<Navbar.Brand href="#home">ShoeShop</Navbar.Brand>
<Nav className="me-auto">
<Nav.Link href="#home">Home</Nav.Link>
<Nav.Link href="#cart">Cart</Nav.Link>
<Nav.Link href="#pricing">Pricing</Nav.Link>
</Nav>
</Container>
</Navbar>
<div className="main-bg" style={{backgroundImage : 'url('+ mainBg +')'}}></div>
<div className="container">
<div className="row">
{
shoes.map(function(a, i){
return (
<Product shoes={shoes} i={i}/>
)
})
}
</div>
</div>
</div>
);
}
function Product(props){
return (
<div className="col-md-4">
<img src={`${process.env.PUBLIC_URL}/shoes${props.i + 1}.jpg`} width="80%" />
<h4>{props.shoes[props.i].title}</h4>
<p>{props.shoes[props.i].price}</p>
</div>
)
}
알게 된 점
중괄호({}) 내에서 문자열에 변수를 포함시키려면 템플릿 리터럴(Template literal) 문법을 사용해야한다. 템플릿 리터럴은 백틱(``)으로 감싸며, 변수를 ${} 안에 넣어서 문자열과 결합할 수 있다.
<img src={`${process.env.PUBLIC_URL}/shoes${props.i + 1}.jpg`} width="80%" />
그래서 위쪽 inline style 속성도 아래처럼 두 가지로도 쓸 수 있다.
<div className="main-bg" style={{backgroundImage : 'url('+ mainBg +')'}}></div>
<div className="main-bg" style={{backgroundImage : `url(${mainBg})`}}></div>
출처 : 코딩애플 https://codingapple.com/
'⚛️ React > 문제풀기 (코딩애플: React)' 카테고리의 다른 글
React : 2초 뒤에 사라지는 alert 만들기 (useEffect, 숏서킷평가) (0) | 2023.05.23 |
---|---|
React : 가나다정렬되어도 끄떡없는 상세페이지 불러오기 (useParams, find()) (0) | 2023.05.22 |
React : input에 글 쓰면 게시글 추가하기 (onChange, 매개변수, trim, splice) (0) | 2023.05.11 |
React : 클릭한 글의 제목이 모달에 뜨게 만들기 (props, 삼항연산자) (0) | 2023.05.08 |
React : 좋아요버튼 만들기 (숏서킷평가,삼항연산자) (0) | 2023.05.02 |