๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ์ ์ฝ์ด ์ปดํฌ๋ํธ ์ค ์ด๋ฒคํธ๋ฅผ ๋ค๋ฃจ์ง ์๋ ๊ธฐ๋ณธ์ ์ธ ์ฝ์ด ์ปดํฌ๋ํธ๋ค์ ์ง๋ ํฌ์คํ ์์ ์์๋ณด์๋ค. View, Text, Image๋ฑ์ ๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ๊ณผ HTML ํ๊ทธ์์ ๋น๊ต๋ ์ด์ ํฌ์คํ (https://iworldt.tistory.com/35)์ ์ฐธ๊ณ ํ๋ฉด ๋๋ค.
์ด๋ฒ ํฌ์คํ ์์๋ ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ์ ์ฌ์ฉ์ ์ปดํฌ๋ํธ์ ๋ํด ์์๋ณผ ๊ฒ์ด๋ค. ๊ทธ ์ค์์๋ ์ฌ์ฉ์ ์ปดํฌ๋ํธ๋ ํด๋์คํ ์ปดํฌ๋ํธ์ ํจ์ํ ์ปดํฌ๋ํธ ๋ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ์ ์ํ ์ ์๋๋ฐ, ๊ทธ ๋์ ์ฐจ์ด์ ์ ์์๋ณด๋๋ก ํ๊ฒ ๋ค.
๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ ์ปดํฌ๋ํธ, ๋ฆฌ์กํธ ์ปดํฌ๋ํธ, ํจ์ ์ปดํฌ๋ํธ, ํด๋์ค ์ปดํฌ๋ํธ
์ฌ์ฉ์ ์ปดํฌ๋ํธ
๋ฆฌ์กํธ์๋ ์ปดํฌ๋ํธ๋ฅผ ํด๋์ค ์ปดํฌ๋ํธ(class component)์ ํจ์ ์ปดํฌ๋ํธ(function component) ๋ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ํ์ฑํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
์ด ์ค ์์์ ์ธ ๋ฐฉ๋ฒ์ด ํด๋์คํ ์ปดํฌ๋ํธ์ด๊ณ , ๋ฆฌ์กํธ ํ ์ ๋์ ์ ๋ฐ๋ผ ํจ์ํ ์ปดํฌ๋ํธ ๋ฐฉ์์ผ๋ก ์ ์ํ๋ ์ถ์ธ์ด๋ค. ๋ฆฌ์กํธ ํ ์ ํจ์ํ ์ปดํฌ๋ํธ ๋ฐฉ์์์๋ง ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ ์์ ๋ฅผ ์ฐธ๊ณ ํ ๋์๋ ํจ์ํ์ธ์ง๋ฅผ ์ ๋ณด๊ณ ์ฐธ๊ณ ํ์.
ํด๋์คํ ์ปดํฌ๋ํธ
ํด๋์คํ ์ปดํฌ๋ํธ๋ ํจ์ํ ์ปดํฌ๋ํธ์ ๋นํด ๋จ์ ์ด ๋ง๋ค.
์ฐ์ ํด๋์ค๋ฅผ ์ ์ํ ๋ ๋ฌด์กฐ๊ฑด extends Component ๋ฅผ ์ถ๊ฐํด์ฃผ์ด์ผ ํ๋ค. ๋ํ render() ๋ฉ์๋๊ฐ ์์๋ก ๊ผญ ํฌํจ๋์ด์ผ ํ๋ค. ๊ฒ๋ค๊ฐ ๋ฆฌ์กํธ์ ์ฃผ์ ๊ธฐ๋ฅ์ธ ๋ฆฌ์กํธ ํ (react hooks)์กฐ์ฐจ ์ฌ์ฉํ ์ ์๋ค. ๊ทธ๋ฌ๋ ํ์ํ ์ํฉ์ด ์๋๋ฉด ๊ฑฐ์ ์ฌ์ฉํ์ง ์๋๋ค.
ํด๋์คํ ์ปดํฌ๋ํธ์ ๋ํด ์์ธํ ์ค๋ช ํ์ง ์๊ฒ ์ง๋ง, ๊ธฐ๋ณธ์ ์ธ ํํ๋ ๋ค์๊ณผ ๊ฐ๋ค.
import React, {Component} from 'react';
export default classComp extends Component{
render() { return null }
}
์ปดํฌ๋ํธ๋ช : classComp
์ปดํฌ๋ํธ์ ์ญํ : null์ ๋ฐํ
Component๋ฅผ 'react'๋ฅผ ํตํด ๊ผญ import ํด์ฃผ์ด์ผ ํ๊ณ , ๊ทธ๋ ๊ฒ importํ ๊ฒ์ ์ปดํฌ๋ํธ(classComp)๋ฅผ ์ ์ํ ๋ ๋ฌด์กฐ๊ฑด extends Component๋ฅผ ํด์ฃผ์ด์ผํ๋ค.
๋ํ ํด๋น ์ปดํฌ๋ํธ๊ฐ ์ค์ ์ํํ ๊ฒ์ render() ๋ฉ์๋ ์์ ๋ด์์ฃผ์ด์ผ ํ๋ค.
ํจ์ํ ์ปดํฌ๋ํธ, ํ์ดํ ๋ฐฉ์ ํจ์
๋ฆฌ์กํธ์ ์์ ๋ฅผ ๋ณด๋ค๋ณด๋ฉด ์ผ๋ฐ์ ์ผ๋ก ์๊ณ ์๋ ํจ์์ ๋ชจ์ต์ด ๋ฌ๋ผ ์ด์ํ๋ ์ฌ๋๋ค๋ ์์ ๊ฒ์ด๋ค. ์ด๋ฅผํ ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
const ArrowComp = ( props ) => {
console.log("์์ฑ๊ฐ", props);
return null;
}
export default ArrowComp;
์๋ ๋ถ๋ช ํจ์์ด๋ค. function์ด๋ผ๋ ํค์๋๋ก ๋ช ์ํด์ฃผ์ง ์๊ณ => ๋ฅผ ์ฌ์ฉํ์ฌ ํจ์๋ฅผ ์ ์ํ๊ธฐ์ ํ์ดํ ๋ฐฉ์ ํจ์์ด๊ณ , ์ด ๋ํ function ํค์๋ ๋ฐฉ์ ํจ์๋ณด๋ค ๋ง์ด ์ฌ์ฉํ๋ ์ถ์ธ์ด๊ธฐ์ ์ฌ์ฉ์ ๊ถ์ฅํ๋ค. ์์ ํจ์๋ฅผ ๊ฐ๋จํ ํด์ํด๋ณด๊ฒ ๋ค.
ํจ์(์ปดํฌ๋ํธ)๋ช : ArrowComp
์์ฑ : props
์ปดํฌ๋ํธ์ ์ญํ : console.log๋ฅผ ์ถ๋ ฅํ ๋ค null์ ๋ฐํ
ํ์ดํ ํจ์ ์ปดํฌ๋ํธ ์์ฑ ์ ๋ฌ, props ์ฃผ๊ณ ๋ฐ๊ธฐ
์ฌ๊ธฐ์ ์์ฑ์ธ props๋ฅผ ์ด๋ป๊ฒ ์ ๋ฌํ๊ณ ์ ๋ฌ๋ฐ๋์ง ๊ถ๊ธํ ๊ฒ์ด๋ค. ๊ทธ๋ผ ํด๋น ์ปดํฌ๋ํธ๋ฅผ ํธ์ถํ ์๋ฅผ ๋ณด์.
export default function App(){
return <ArrowComp msg="hellow Arrow"/>
}
App์ ArrowComp ์ปดํฌ๋ํธ๋ฅผ ํธ์ถํ๋ฉด์ ์์ฑ์ผ๋ก msg๋ฅผ ๋ฃ์ด์ฃผ์๋ค. ๊ทธ๋ผ ์ด๋ ArrowComp๋ props์ ํ ์์๋ก msg๋ฅผ ๋ฐ๊ฒ ๋๋ค. ๊ทธ msg์ ๊ฐ, "hello Arrow"๋ง์ ์ถ๋ ฅํ๊ณ ์ถ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์์ ํด์ค ์ ์๋ค.
const ArrowComp = ( props ) => {
console.log("msg : ", props.msg);
return null;
}
export default ArrowComp;
props๋ ์์ฑ์ ๋ชจ๋ ๋ฌถ์ ํํ์ด๊ธฐ ๋๋ฌธ์, props ์ค์์ msg๋ฅผ . ์ ํตํด ๋ช ์ํด์ฃผ๋ฉด "hello Arrow"๋ง ์ถ๋ ฅํ ์ ์๊ฒ ๋๋ค. ์์ฑ์ ํ์ ์ ๊ธฐ๋ณธ์ ์ธ number๋ถํฐ string, Json ๊น์ง ๋ค์ํ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ํจ์ํ ์ปดํฌ๋ํธ๊ฐ ๋ ๋ง์ด ์ฌ์ฉ๋ ์ ์๋ ๊ฒ์ด๋ค.
๋ํ ๋ฆฌ์กํธ ํ ์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค๊ณ ๋งํ์๋๋ฐ, ํ ์ ์์ ์ค๋ช ํ ์์ฑ(props)๋ค์ ์ํ ๊ด๋ฆฌ์ ๋ณ๊ฒฝ๋์์ ๋์ ๋ฐ์ ๋ฑ ํ ์ปดํฌ๋ํธ์ lifecycle์ ๊ด๋ฆฌํด์ฃผ๋ ์ญํ ์ ํ๋ค. "์์ฑ"์ด๋ผ๋ ๊ฒ ๋๋ฌธ์ ํจ์ํ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๋ด์ผ ํ๋ค.
์์์ ๋ช ์ํ ๊ฒ ์ฒ๋ผ ์ปดํฌ๋ํธ์ ์์ฑ์ msg์ ๊ฐ์ด ๋ง๋ค์ด ์ค ์๋ ์๊ณ , ๊ธฐ๋ณธ์ ์ผ๋ก ๋ด์ฅ๋์ด ์๋ ์์ฑ๋ ์๋ค. ๊ทธ์ ๋ํด์๋ ์์๋ณด์.
์ปดํฌ๋ํธ์ ๊ธฐ๋ณธ ์์ฑ
key
ํ ์ปดํฌ๋ํธ๋ฅผ ์ ์ํ๊ณ , App์์๋ ๊ทธ ์ปดํฌ๋ํธ๋ฅผ ์ฌ๋ฌ๋ฒ ํธ์ถํ์ฌ ์ฌ์ฉํ ์ ์๋ค. ์์ hellow Arrow ๋ฌธ์ฅ์ 10๋ฒ์ด๊ณ 100๋ฒ์ด๊ณ ํธ์ถํ ์ ์๋ ๊ฒ์ด๋ค. ์ด๋ด ๊ฒฝ์ฐ ๋ฆฌ์กํธ ํ๋ ์์ํฌ๋ ๋ ๋๋ง(์ปดํฌ๋ํธ๋ฅผ ํธ์ถํ์ฌ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๋ ๊ณผ์ )์ ์ต์ ํ ํ๊ธฐ ์ํด ๊ฐ๊ฐ์ key ๊ฐ์ ์ฃผ๊ธฐ๋ฅผ ๊ถ์ฅํ๋ค.
'Each child in a list should have a unique key' ๋ผ๋ ๊ฒฝ๊ณ ๋ฉ์ธ์ง๊ฐ ๋ฐ์ํ๋ ์ด์ ์ด๋ค. HTML์ ํ๊ทธ์์ id๋ฅผ ์ฃผ๋ ๊ฒ๊ณผ ๋น์ทํ๋ค๊ณ ๋ณด๋ฉด ๋๊ฒ ๋ค.
children
๋ถ๋ชจ ์ปดํฌ๋ํธ ์์ ์์ ์ปดํฌ๋ํธ๋ฅผ ๋ฃ๊ณ ์ ํ ๋ ์ฌ์ฉํ๋๋ฐ, ์ด๋ ์ปดํฌ๋ํธ์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ํฐ ๊ด๋ จ์ด ์๋ค.
์ด๋ฅผํ ๋ฉด ๋ถ๋ชจ์ปดํฌ๋ํธ๊ฐ ๋ ์ด์์(ํ ํ๋ฆฟ)์ด๊ณ ๊ทธ ์์ ์์ ์์๋ค๋ง ๊ณ์ ๋ฐ๋์ด์ฃผ๋ฉด ๋๋ค๊ณ ํ ๋, ๋ถ๋ชจ๋ ์์์ ๋ฐ์์ ๋ ์ด์์(ํ ํ๋ฆฟ)์ ์ ์ฉํด์ค์ผํ๊ธฐ ๋๋ฌธ์ props๋ก {children}์ ๋ฐ์์์ฃผ์ด์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ ๋ ์ด์์, ์ฆ ๋์ ์ปดํฌ๋ํธ ํ๊ทธ์ ์์ ์์๋ก {children}์ ๋ฃ์ด์ฃผ์ด์ผ ํ๋ค.
์๊น ์ ์๋ ArrowComp ์์ ๋ฅผ ๋ค์ ํ์ฉํด๋ณด์.
const ArrowComp = ( props ) => {
console.log("msg : ", props.msg);
return null;
}
export default ArrowComp;
msg๋ฅผ ์ถ๋ ฅํ๋ ArrowComp์ด๋ค. ์ด ์น๊ตฌ๊ฐ ์์ ์์๊ฐ ๋ ๊ฒ์ด๋ค.
const Wrapper=({children})=>{
return (
<Text>{children}</Text>
);
}
export default function App(){
return (
<Wrapper>
<ArrowComp msg="hi"/>
<ArrowComp msg="hellow"/>
</Wrapper>
);
}
Wrapper๋ ์์์์๋ฅผ ๋ฐ์์ Text๋ก ์ถ๋ ฅํด์ฃผ๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ์ด๋ค.
App์์ Wrapper๊ฐ ์์์์ hi, hellow ๋๊ฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์์ธํ๊ฒ ์์ ๋ฅผ ์์ฑํ์ง ์์์ผ๋ ์์์์์ ๋ํ ์์ฑ๊ฐ ๋ณ๊ฒฝ, ์คํ์ผ ์ ์ฉ ๋ฑ ๋ค์ํ ๊ธฐ๋ฅ๋ Wrapper ํจ์ ๋ด์์ ๊ฐ๋ฅํ๋ค.
ref
ํจ์ ์ปดํฌ๋ํธ์์๋ ์ฌ์ฉํ ์ ์๋ค. ๊ทธ๋ฌ๋ forwardRef, useImperativeHandle ๋ฑ์ ์ด์ฉํ์ฌ ref๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ref๋ ์ฝ๊ฒ๋งํด js์ getElementBy***์ด๋ค. ์ปดํฌ๋ํธ ์์ฒด์ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ด๋ค.
์ด๋ฒ ํฌ์คํ ์ ์ฌ๊ธฐ๊น์ง ๋ง์น๋๋ก ํ๊ฒ ๋ค. ๋ค์ ํฌ์คํ ์ ์ปดํฌ๋ํธ์ ์ด๋ฒคํธ๋ฅผ ๋ค๋ฃจ๋ ๋ฒ, ์ปดํฌ๋ํธ์ ์ด๋ฒคํธ ์์ฑ์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ๋ค.
๋๊ธ