⚛️ React/문제풀기 (코딩애플: React)

React : 데이터 바인딩해서 컴포넌트로 뿌리기 (템플릿 리터럴 Template literal)

Zoeeey 2023. 5. 18. 12:30

데이터 바인딩해서 컴포넌트로 뿌리기

조건

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/