- map, mockup data๋ฅผ ํ์ฉํ์ฌ ์ปดํฌ๋ํธ์ ๐props์ ์ ๋ฌํ๋ ๋ฒ์ ๋ํด์!
map
๋ฉ์๋๋ ๋ฐฐ์ด ๊ฐ์ฒด์ ๋ฉ์๋๋ก ์๋ก ๋งคํ๋ ์๋ก์ด ๊ฐ์ ๋ฐํํ๋ค๋ ๊ฒ์ด ํน์ง์ด๋ค.
ํ๋์ ๊ฐ์ ํ์์ ๊ฐ์ง ์ปดํฌ๋ํธ
๊ฐ ๋ฐ๋ณต๋ ํํ๋ก์ ์๋์ mock data
๋ก ๋ถํฐ ์ป์ ์ฃผ์ ๊ฐ, ์ํ๋ช
, ๊ฐ๊ฒฉ์ ๋ฐ์ดํฐ๋ก ๋ฐ์ map ๋ฉ์๋
๋ฅผ ์ฌ์ฉํด ์๋ก์ด ์ปดํฌ๋ํธ ํํ 3๊ฐ๋ก ๋ฆฌํดํ ๊ฒฐ๊ณผ์ด๋ค.
mockup data
๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ api ๊ตฌ์ถ ์ ์์ ๋ฐฉํธ์ผ๋ก ํ ์คํธ๋ฅผ ํ๊ธฐ ์ํ ๋ฐ์ดํฐ๋ก ํ๋ฉด์ ๊ทธ๋ ค๋ณด๊ธฐ ์ํด์ ์ฌ์ฉ๋๊ณค ํ๋ค.<script> const DATA = [ { id: 1, img: "https://s3.ap-northeast-2.amazonaws.com/cdn.wecode.co.kr/social/mushroom.jpg", name: "๋งํ๋ฆฌ ๋ฒ์ฏ 200g", price: "1,000์" }, { id: 2, img: "https://s3.ap-northeast-2.amazonaws.com/cdn.wecode.co.kr/social/octo.jpg", name: "[์ํ์์ฐ] ๋ชจ๋ฆฌํ๋์ฐ ์์๋ฌธ์ด ํ๋ง๋ฆฌ(๋๋)", price: "27,000์" }, { id: 3, img: "https://s3.ap-northeast-2.amazonaws.com/cdn.wecode.co.kr/social/pota.jpg", name: "[KF365] ๋ฐค๊ณ ๊ตฌ๋ง 800g/๋ด", price: "4,590์" }, { id: 4, img: "https://s3.ap-northeast-2.amazonaws.com/cdn.wecode.co.kr/social/vegi.jpg", name: "๊ฒฝ๊ธฐ ์๊ธ์น 250g/๋จ", price: "2,450์" } ] export default DATA; </script>
-์ ์ด๋ฏธ์ง์์๋ LoginPage
์ปดํฌ๋ํธ์์ Button
์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค.
LoginPage
๊ฐ ๋ถ๋ชจ ์ปดํฌ๋ํธButton
์ด ์์ ์ปดํฌ๋ํธ
Props
๋ฅผ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ์๊ฒ ๋๊ธธ ์ ์์ผ๋ฉฐ, ์ด๋ ๊ฒ ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ง๋ ๊ฐ์ฒด๋ฅผProps
๋ผํ๋ค.- ๋ฐ๋ผ์
props
๋ฅผ ํตํด ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ ์์ ์ปดํฌ๋ํธ๋ ๋ค์ํ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ๋ฐ์ ์ฌ์ฉํ ์ ์๋ค.
- EX>๋์ผํ ์ปดํฌ๋ํธ์ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ ํ ์ ์๋ค
-๋ฆฌ์กํธ๋ฅผ JSX ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ค๋ ์ฌ์ค์ ๋ํด์ ๋ช ์ฌํ์!
JSX
๋ HTML ์์์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์ฐ๋ ๋ฌธ๋ฒ์ธ๋ฐ ์์ ์ปดํฌ๋ํธ์Props
์ ๋ฌ์ {}๋ก ํญ์ ๋ฌถ์ด์ค๋ค
- EX>
<LoginButton abc={{abc:1}}/>
- jsx ๋ฌธ๋ฒ์ ์จ์ ๊ฐ์ฒด๋ฅผ ๋ด์ ํํ
- EX2>
<LoginButtont text={'ํ์ธ'}/>
- ๋ก๊ทธ์ธ ๋ฒํผ ์ปดํฌ๋ํธ์ Props๋ก 'text' ํค์ 'ํ์ธ' ํค์ ๊ฐ์ด ๋์ด๊ฐ ํํ๋ก ๊ฐ์ฒด์ ํํ๋ก ๊ฐ์ ๋๊ฒจ๋ฐ์๋ค.
props
๋ฅผ ๋ฃ์ด์ค๋ค.
- ๋ ๋ํจ์๊ฐ ํญ์ ์คํ์ด๋๋ฉด์ ๊ทธ๊ฒ์ ๊ฒฐ๊ณผ๊ฐ ํ๋ฉด์ ๋ํ๋์ง๊ธฐ ๋๋ฌธ์ ๋ ๋ ํจ์์ ๋ฆฌํด ์ฌ์ด์์ ๊ตฌํํ๊ณ ์ ํ๋ ์ฝ๋๋ฅผ ์์ฑํด์ผํ๋ค.
- ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์์ปดํฌ๋ํธ์ ์ ๋ฌํ
Props
์ ์ ๊ทผํ๊ธฐ ์ํด์๋ this.props๋ก ์ ๊ทผํ๋ค.- ์ปดํฌ๋ํธ๋ ๋ ๋ฆฝ์ ์ด๊ธฐ ๋๋ฌธ์ ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ์ฌ์ฉํ๋
Props
์ ๋ฐ๋ผ ๊ฐ์ ์ปดํฌ๋ํธ๋ผ๋ ๋ค๋ฅธ ๊ฐ์ ๊ฐ์ง ์ ์๋ค.<script> import React, { Component } from 'react'; class ProductCard extends Component { render() { console.log(this.props) return ( <div className="card"> <img className="productImg" src={this.props.img}/> <div className="productInfoWrapper"> <p className="productName">{this.props.name}</p> <p className="productPrice">{this.props.price}</p> </div> </div> ) } } export default ProductCard; </script>
- map ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ์์ ์ปดํฌ๋ํธ์ธ ProductCard๋ฅผ mock-data์ ๊ธธ์ด๋งํผ ๋ง๋ค๊ณ props๋ฅผ ์ ๋ฌํ์ฌ ๋ฐ์ดํฐ๊ฐ ์ ๋ฌ๋ ํํ์ ์ปดํฌ๋ํธ๋ค์ ๋ฐํํ์ฌ ํ๋ฉด์ ๋ ๋ํด์ค๋ค..!
<script> import React, {Component} from 'react'; import ProductCard from './Card' import './App.css' import DATA from './data'; class App extends Component { render() { return ( <div className="contaniner"> <div className="titleWrapper"> <p className="title">๊ธฐ๋ถ์ข์ JAMIE MARKET</p> <p className="subTitle">์ดํน๊ธ ๋ฐฐ์ก JAMIE ROCEKT DELIVERY</p> </div> <div className="cardWrapper"> {DATA.map((product,idx) => { return ( <ProductCard key={product.id} img={product.img} name={product.name} price={product.price} /> }) } ) </div> </div> ) } }; export default App; </script>
- props๋ ๊ฐ์ฒด๋ผ๋ ์ฌ์ค์ ์์ง๋ง๊ณ ๋ฆฌ์กํธ์์ props๋ฅผ ์ ํ์ฉํด๋ณด์
- ๋ฐฑ์ ๋ง๊ณ ํ๋ณต์ค์ด์ ๊ดํฌ๋์ ํฌํผ ๊ฐ์ ์ค:)