๐ง ๋ฆฌ์กํธ ์ปดํฌ๋ํธ
- ๋ฆฌ์กํธ์์ ์์ ๊ฐ์ ๊ฐ ๋ถ๋ถ๋ค์ ์ปดํฌ๋ํธ๋ผ ํฉ๋๋ค.
- ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ ์งํฉ์ ๊ฐ์ DOM ๊ตฌ์กฐ๋ฅผ ์ฌ์ฌ์ฉํ ์ ์์ด์ผ ํฉ๋๋ค.
- ๋ฆฌ์กํธ๋ก ๋ง๋ค๊ณ ์ถ์ UI๋ฅผ ์๊ฐํ ๋, ์๋ฆฌ๋จผํธ๋ฅผ ์ฌ์ฌ์ฉ ํ ์ ์๋์ง ๊ณ ๋ คํด์ผํฉ๋๋ค.
- ์ด๋ฐ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ฅ์ฑ์ด ์ฆ๊ฐํฉ๋๋ค.
๋ฆฌ์กํธ์์ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋๋ 3๊ฐ์ง ๋ฐฉ๋ฒ
- createClass๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- ES6 Class๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- ์ํ๊ฐ ์๋ ํจ์ํ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
1) React.createClass (createClass๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ)
- ๋ฆฌ์กํธ๊ฐ ์ฒ์ ๋ง๋ค์ด์ก์ ๋์ ์ ์ผํ ๋ฐฉ๋ฒ์ด์๋ค.
- ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์์ดํ ๋ค์ด ๋ค์ด ์๋ ๋ฐฐ์ด์ ์ปดํฌ๋ํธ์ ํ๋กํผํฐ๋ฅผ ํตํด ๋๊ธธ ์ ์๋ค.
(์์)
const FruitList = React.createClass({
displayName: "FruitList"
render(){
return React.createElement("ul", {className: "fruits"},
this.props.items.map((fruit, i) => React.createElement("li", {key: i}, fruit)
)
)
}
})
const items = {
"์ฌ๊ณผ 1๊ฐ",
"ํฌ๋ 2๊ฐ",
"๋ฉ๋ก 5๊ฐ"
}
ReactDOM.render(
React.createElement(FruitsList, {item}, null),
document.getElementById('react-container')
)
<FruitsList items =[...]>
<ul classname = "fruits">
<li key="0">์ฌ๊ณผ 1๊ฐ</li>
<li key="1">ํฌ๋ 2๊ฐ</li>
<li key="2">๋ฉ๋ก 5๊ฐ</li>
</ul>
</FruitsList>
- ์ปดํฌ๋ํธ๋ ๊ฐ์ฒด์ ๋๋ค. ๋ฐ๋ผ์ ์ผ๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ ํด๋์ค์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ด๋ถ์ ์ฝ๋๋ฅผ ์บก์ํ ํ ์ ์์ต๋๋ค.
- ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํด ๋ง๋ค์ด์ง ์๋ฆฌ๋จผํธ๋ฅผ ์ธ ๋๋ ๋ฌธ์์ด์ด ์๋๋ผ ์ปดํฌ๋ํธ ํด๋์ค๋ฅผ ์ง์ ์ด๋ค๋ ์ ์ ์ํด์ผ ํฉ๋๋ค.
2) React.Component (ES6 ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ)
- ES6์ ํด๋์ค ์ ์ธ์ ๋๋ค.
- ๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ฅผ ์๋ก ๋ง๋ค ๋ React.Component๋ฅผ ์ถ์ ํด๋์ค๋ก ์ฌ์ฉ ํ ์ ์๋ค.
- ES6 ๊ตฌ๋ฌธ์ผ๋ก ์ถ์ ํด๋์ค๋ฅผ ์์ํ๋ฉด ์ปค์คํ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค ์ ์๋ค.
(์์)
class FruitsList extends React.Component {
renderListItem(ingredient, i){
return React.createElement("li", { key: i}, fruit)
}
render(){
return React.createElement("ul", {className: "fruits"},
this.props.items.map(this.renderListItem)
)
}
}
3) ํจ์ํ ์ปดํฌ๋ํธ
- ๊ฐ์ฒด๊ฐ ์๋ ํจ์์ ๋๋ค.
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์์น์ ์ฐ์ตํ๊ธฐ ์ข์ ๋ฐฉ๋ฒ์ ๋๋ค. -> ์์ ํจ์๋ก ๋ง๋ค์ด์ฃผ์
- ํ๋กํผํฐ๋ฅผ ์ธ์๋ก ๋ฐ์์ DOM ์๋ฆฌ๋จผํธ๋ฅผ ๋ฐํํ๋ ํจ์์ ๋๋ค.
- ์ฝ๋๊ฐ ๋ ๋จ์ํด์ง๊ณ , ์ฝ๋๋ฒ ์ด์ค๋ฅผ ํจ์ฌ ๋ ์ ํ ์คํธ ํ ์ ์์ต๋๋ค. ์ํคํ ์ณ๋ฅผ ๋จ์ํ๊ฒ ์ ์ง ํ ์ ์์ต๋๋ค.
- ๋ค๋ฅธ ์ปดํฐ๋ํธ ๋ฐฉ๋ฒ๋ณด๋ค ์ฑ๋ฅ์ด ์ฐ์ํฉ๋๋ค. ํ์ง๋ง ์บก์ํํด์ผ ํ๊ฑฐ๋ this๊ฐ ํ์ํ๋ฉด ์ฌ์ฉ ํ ์ ์์ต๋๋ค.
- state๋ฅผ ๊ฐ์ง ๋ชปํ๋ฉฐ, life-cycle ํจ์ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค.
(์์)
const fruitsList = props =>
React.createElement("ul", {className: "fruits"},
props.items.map((fruit, i) =>
React.createElement("li", {key: i}, fruit)
)
)
ํด๋์ค ์ปดํฌ๋ํธ VS ํจ์ํ ์ปดํฌ๋ํธ
- ํจ์ํ์ ์ฝ๋๊ฐ ๋ ๋จ์ํ๋ฉฐ ๊ฐ๊ฒฐํ๋ค. ์๋๋ ๋ ๋น ๋ฅด๋ค
- ํ์ง๋ง ํจ์ํ์ state, this, life-cycle ํจ์๋ฅผ ์ฌ์ฉ ํ ์ ์๋ค.
๐ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ ๋ง๊ฒ ํจ์ํ ์ปดํฌ๋ํธ๋ฅผ ์จ์ฃผ์!
( state์ this ๊ทธ๋ฆฌ๊ณ life-cycle ํจ์๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด )
๋ฐ์ํ
'Front-end > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] JSX ๋? (0) | 2020.07.09 |
---|---|
[React] ์์ ๋ฆฌ์กํธ (๊ฐ์ DOM, ๋ฆฌ์กํธ ์๋ฆฌ๋จผํธ, ReactDOM) (0) | 2020.07.06 |
[React] ๋ฆฌ์กํธ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ? (0) | 2020.07.06 |
[React] ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ํต์ฌ ๊ฐ๋ - ๋ฐ์ดํฐ ๋ณํ (0) | 2020.07.05 |
[React] ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ํต์ฌ ๊ฐ๋ - ๋ถ๋ณ์ฑ (0) | 2020.07.05 |