component
HTML ์ ๋ฐํํ๋ ํจ์
component๋ฅผ ์ฌ์ฉํด์
ReactDOM.render(
<App />,
document.getElementById('root')
);
JSX
javascrtip ์์ HTML
Component๋ฅผ ๋ง๋ค๊ณ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง
<APP />
javascript + HTML์ ์กฐํฉ
React ์ component ์์ฑ ํ๋ฆ
react application์ ์ค์ง ํ๋์ component๋ง rendering
๋ฐ๋ผ์ -> ๋ชจ๋ ๊ฒ์ apapplication(API) ์์ ๋ค์ด๊ฐ์ผํจ
๊ตฌํํ๊ณ ์ถ์ component ํ์ผ๋ค์ ๋ง๋ค์ด API.js์ import ํ๊ณ
API.js๋ฅผ index ์ ๋ ๋๋งํ๋ ๋ฐฉ์
REACT์ ์์ฑ์ ์ด์ฉํ์ฌ component ๋ถ๋ฌ์ค๊ธฐ
โ ์ ์ ๋ฐ์ดํฐ ์ค์ (์ง์ ๋ฃ์ด์ค ๋ฐ์ดํฐ)
ํ์ง๋ง ์ค์ ์น์ฌ์ดํธ์์๋ ๊ธ์จ๋ฅผ ์ผ์ผํ ์น ์ ์๋ค. json data๋ฅผ ๊ฐ์ ธ์จ๋ค.
component ์ props(์์ฑ)์ ๊ฐ์ง๊ณ ์์ ์ฌ์ฉ ๊ฐ๋ฅ
ex) Food์ props ์ค fav ๋ฅผ ๊ฐ์ ธ์ด
props.fav -> { fav }
์ฒ์๋ถํฐ fav๋ก ๊ฐ์ ธ์ฌ ์ ์์
โ ๋์ ๋ฐ์ดํฐ ์ค์ ( json data )
* map ํจ์
A.map
๋ฐฐ์ด์ ๊ฐ ์์๋ฅผ ๋๋ฉฐ callback ํจ์๋ฅผ ์คํํ๊ณ array ๊ฒฐ๊ณผ๋ฌผ์ ๋ง๋ฆ
react d์ ๋ชจ๋ element ๋ ๊ฐ๋ณ์์ฑ์ ๊ฐ์ ธ์ผ ํ๋ค - -> id ์ง์
//json data
const foodILike = [
{
id:1,
name:"waffle",
image:"https://storcpdkenticomedia.blob.core.windows.net/media/recipemanagementsystem/media/recipe-media-files/recipes/retail/x17/2020_belgian-style-waffles_16700_600x600.jpg?ext=.jpg"
},
{
id:2,
name:"happy",
image:"https://storcpdkenticomedia.blob.core.windows.net/media/recipemanagementsystem/media/recipe-media-files/recipes/retail/x17/2020_belgian-style-waffles_16700_600x600.jpg?ext=.jpg",
}
]
//html ์์ฑ
function Food({name,pic}){
return (
<div>
<h2>i love {name}</h2>
<img src={pic} alt={name}></img>
</div>
);
}
//json data๋ฅผ ๋๋ฉฐ ๋ฐ๋ณต์ ์ผ๋ก html ์์ฑ
function App() {
return (
<div>
{foodILike.map(dish =>(
<Food key ={dish.id} pic={dish.image}/>
))}
</div>
);
}
export default App;
ํจ์๋ก ๋นผ์ค๋ ๊ฐ๋ฅ
//html ์์ฑ
function Food({name,pic}){
return (
<div>
<h2>i love {name}</h2>
<img src={pic} alt={name}></img>
</div>
);
}
//component ์์ฑ ๊ฐ์ ธ์ค๊ธฐ
function renderFood(dish){
return <Food name={dish.name} pic={dish.image}/>
}
//json data๋ฅผ ๋๋ฉฐ ๋ฐ๋ณต์ ์ผ๋ก html ์์ฑ (renderFood)ํจ์ ์ด์ฉ
function App() {
return (
<div>
{foodILike.map(renderFood) }
</div>
);
}
export default App;
ํ์ง๋ง
<Food key ={dish.id} pic={dish.image}/>
dish.image๋ฅผ ์ค์๋ก ๋ถ๋ฅด์ง ์์๋ค๋ฉด?
dish.id ๊ฐ ์์๋ค๋ฉด?
์ค๋ฅ๊ฐ ์๊ธฐ๊ฒ ๋๋๋ฐ ์ด๋ฅผ ๋ฐฉ์งํ ์ ์๋ค.
Proptypes ( props ์ ํจ์ฑ ๊ฒ์ฌ )
์ ํํ prop์ ์ ๋ฌํ๋์ง ํ์ธ
1) prop-types ์ค์น
์ฌ๋ฐ๋ฅธ props ๊ฐ ์ ๋ฌ๋์๋์ง ํ์ธ
npm i prop-types
2) Component ์์ ๋ฐ์ protoTypes ๋ก ์ ํจ์ฑ ๊ฒ์ฌ
Food.propTypes = {
name:PropTypes.string.isRequired,
pic:PropTypes.string.isRequired,
rating:PropTypes.number.isRequired
}
โ propTypes
: ์ด ์ด๋ฆ์ ๊ทธ๋๋ก ์ง์ ํด์ผ ํจ ex) tamiTypes (X)
โ isReqired : ํ์ ์์
โ number, string : ์์ ์ ์ ํํ
๊ทธ์ธ ๋ค์ํ propTypes๋ฅผ ํตํด ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ํ ์ ์๋ ์ต์ ๋ค์ด ์์
ko.reactjs.org/docs/typechecking-with-proptypes.html
์์ฑ๋ ์์
ํ์ง๋ง ์ด ์์ ๋ ํ๊ณ์ ์ด ์๋ค.
jsondata ๋ฅผ ์ง์ ํ๋์ฝ๋ฉ ํ ๊ฒ
์ค์ ๋ก๋ ํ๋์ฝ๋ฉํ์ง ์๊ณ
๋์ ์ธ data(dynamic data)๋ฅผ ์ด์ฉํ์ฌ ์์ ํ๋ค
๋ค์์ ๋์ data๋ฅผ ํ์ฉํ๋ ์์ ๋ฅผ ๊ตฌํํด๋ณด์
'๐ React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] ๋ฆฌ์กํธ์ Hooks ์์ ๋ก ์ ๋ณตํ๊ธฐ (0) | 2021.03.18 |
---|---|
[React ] React Router๋ฅผ ์ด์ฉํ์ฌ component๊ฐ์ props ๋๊ฒจ์ฃผ๊ธฐ ( (Link & props) (0) | 2021.03.18 |
[React] ํ๋ก์ ํธ GitHub Pages ๋ฐฐํฌํ๊ธฐ + Axios ๋ฅผํตํด json data ๊ฐ์ ธ์ค๊ธฐ (2) | 2021.03.17 |
[React] setState and Lifecycle (0) | 2021.03.16 |
React ๋ฆฌ์กํธ๋, ๋ฆฌ์กํธ ์์ ํ๊ฒฝ ์ค์ (0) | 2021.03.16 |
๋๊ธ