๋ฆฌ์กํธ์์ ์ปดํฌ๋ํธ๋ ๋
๋ฆฝ์ ์ด๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ต์์ ์ฝ๋ ๋จ์์ด๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์ ํจ์์ ๊ฐ์ ๋ชฉ์ ์ ์ ๊ณตํ์ง๋ง ๋ถ๋ฆฌ๋์ด ๋์ํ๊ณ HTML์ return ํด์ฃผ๋ ํน์ง์ ๊ฐ์ก๋ค.
์ปดํฌ๋ํธ์ ์ด๋ฆ์ ํญ์ ๋๋ฌธ์๋ก ์์ํด์ผํ๋ค.
์ปดํฌ๋ํธ๋ ํจ์ํ ์ปดํฌ๋ํธ์ ํด๋์คํ ์ปดํฌ๋ํธ๋ก ๋๋๋ค.
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
class Welcome extends React.Component {
render() {
return <h1>Hello, {this.props.name}</h1>;
}
}
const element = <Welcome name="Sara" />;
๋ฆฌ์กํธ ์๋ฆฌ๋จผํธ๋ก DOM ํํฌ ๋ฟ๋ง ์๋๋ผ ์ฌ์ฉ์ ์ ์ ์ปดํฌ๋ํธ๋ ๋ํ๋ผ ์ ์๋ค.
๋ฆฌ์กํธ๊ฐ ์ฌ์ฉ์ ์ ์ ์ปดํฌ๋ํธ๋ก ์์ฑํ ์๋ฆฌ๋จผํธ๋ฅผ ๋ง๋๋ฉด ์์ฑ๋ ์์๋ฅผ ๊ฐ์ฒด๋ก ๋ง๋ค์ด ์ ๋ฌํด์ฃผ๋๋ฐ ๊ทธ๊ฒ์ด props๊ฐ ๋๋ค.
props๋ ๋จ์ผ ๊ฐ์ฒด๋ก ์์๋ฅผ key์ value ๊ฐ์ผ๋ก ์ ์ํด ํด๋น ์ปดํฌ๋ํธ์์ ๋ํ๋ ์ ์๊ฒ ๋๋ค.
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
const element = <Welcome name="Sara" />;
ReactDOM.render(
element,
document.getElementById('root')
);
<Welcome name="Sara" />
ย ์๋ฆฌ๋จผํธ๋กย ReactDOM.render()
๋ฅผ ํธ์ถ{name: 'Sara'}
๋ฅผ props๋ก ํ์ฌย Welcomeย ์ปดํฌ๋ํธ๋ฅผ ํธ์ถ<h1>Hello, Sara</h1>
ย ์๋ฆฌ๋จผํธ๋ฅผ ๋ฐํ<h1>Hello, Sara</h1>
ย ์๋ฆฌ๋จผํธ์ ์ผ์นํ๋๋ก DOM์ ํจ์จ์ ์ผ๋ก ์
๋ฐ์ดํธ์ปดํฌ๋ํธ๋ ์์ ์ ์ถ๋ ฅ์ ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ฅผ ์ฐธ์กฐํด ์ฌ์ฉํ ์ ์๋ค.
์ปดํฌ๋ํธ์ ๋ค๋ฅธ ์์๋ฅผ ์
๋ ฅํด ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
function App() {
return (
<div>
<Welcome name="Sara" />
<Welcome name="Cahal" />
<Welcome name="Edite" />
</div>
);
}
์ปดํฌ๋ํธ๋ฅผ ์ฌ๋ฌ ์์ ์ปดํฌ๋ํธ๋ก ๋๋๋ ๊ฒ์ ํฐ ํ๋ก์ ํธ์์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ก ํจ์จ์ฑ์ ๋์ผ ์ ์๋ค.
๋ค์ ์ฝ๋๋ฅผ ์์ ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌํด๋ณด๊ฒ ๋ค.
function Comment(props) {
return (
<div className="Comment">
<div className="UserInfo">
<img className="Avatar"
src={props.author.avatarUrl}
alt={props.author.name}
/>
<div className="UserInfo-name">
{props.author.name}
</div>
</div>
<div className="Comment-text">
{props.text}
</div>
<div className="Comment-date">
{formatDate(props.date)}
</div>
</div>
);
}
์ด ์ปดํฌ๋ํธ๋ props์ author(๊ฐ์ฒด),ย text(๋ฌธ์์ด) ๋ฐย date(๋ ์ง)๋ฅผ props๋ก ๋ฐ๋๋ค.
์ ์ฝ๋๋ ์ค์ฒฉ๊ตฌ์กฐ๋ก ๋ณํํ๊ธฐ ์ด๋ ต๊ณ ์ฌ์ฌ์ฉ์ฑ๋ ๋์ง ์์ ๋ณด์ธ๋ค.
ํ์ง๋ง ์ฝ๋๊ตฌ์กฐ์ ์ปดํฌ๋ํธ ๋ถ๋ฆฌ๋ก ๊ฐ๋
์ฑ ๋์ ์ฝ๋๋ฅผ ๋ง๋ค ์ ์๋ค.
function Avatar(props) {
return (
<img className="Avatar"
src={props.user.avatarUrl}
alt={props.user.name}
/>
);
}
function UserInfo(props) {
return (
<div className="UserInfo">
<Avatar user={props.user} />
<div className="UserInfo-name">
{props.user.name}
</div>
</div>
);
}
function Comment(props) {
return (
<div className="Comment">
<UserInfo user={props.author} /> //๋ถ๋ฆฌํ ์ปดํฌ๋ํธ ์ ์ฉ
<div className="Comment-text">
{props.text}
</div>
<div className="Comment-date">
{formatDate(props.date)}
</div>
</div>
);
}
Avatar ์ปดํฌ๋ํธ์์ props๋ ์๋กญ๊ฒ key ๊ฐ์ด ๋ณ๊ฒฝ๋์๋ค.
props์ ์ด๋ฆ์ ์ฌ์ฉ๋ context๊ฐ ์๋ ์ปดํฌ๋ํธ ์์ฒด์์ ์ด๋ค ์ญํ ์ ํ๋์ง์ ๋ํ ๊ด์ ์ผ๋ก ์ง๋๊ฒ์ด ์ข๋ค.
https://www.w3schools.com/react/react_components.asp
https://goddaehee.tistory.com/299
https://ko.reactjs.org/docs/components-and-props.html