๐ Props
props๋ properties์ ์ค์ธ ํํ์ผ๋ก Component ์์ฑ์ ์ค์ ํ ๋ ์ฌ์ฉํ๋ ์์ ์ ๋๋ค. props ๊ฐ์ ํด๋น Component๋ฅผ ๋ถ๋ฌ์ ์ฌ์ฉํ๋ ๋ถ๋ชจ Component์์ ์ค์ ํ ์ ์์ต๋๋ค.
๐ JSX ๋ด๋ถ์์ props ๋ ๋๋ง
props ๊ฐ์ Component ํจ์์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ์์ ์ฌ์ฉ
ํ ์ ์์ต๋๋ค. props๋ฅผ ๋ ๋๋งํ ๋๋ JSX๋ด๋ถ์์ { } ๊ธฐํธ๋ก ๊ฐ์ธ์ฃผ๋ฉด ๋ฉ๋๋ค.
const MyComponent = props => {
return <div> Hi, My name is { props.name }!!</div>;
};
export default MyComopnent;
๐ Component ์ฌ์ฉํ ๋ pops ๊ฐ ์ง์
๋ถ๋ฌ์จ Component ๋ด๋ถ์ props ๊ฐ์ ์ง์
ํ ์ ์์ต๋๋ค.
import MyComponent from './MyComponent';
const App = () => {
return <MyComponent name="React"/>;
};
export default App;
๐ props ๊ธฐ๋ณธ๊ฐ ์ค์ : defaultProps
props ๊ฐ์ ๋ฐ๋ก ์ง์ ํ์ง ์์์ ๋ ๋ณด์ฌ ์ค ๊ธฐ๋ณธ ๊ฐ์ ์ค์
ํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
const MyComponent = props => {
return <div> Hi, My name is { props.name }!!</div>;
};
MyComponent.defaultProps = {
name: '๊ธฐ๋ณธ ์ด๋ฆ'
};
export default MyComopnent;
๐ propTypes๋ฅผ ํตํ props ๊ฒ์ฆ
Component์ ํ์ props๋ฅผ ์ง์ ํ๊ฑฐ๋ props์ type์ ์ง์ ํ ๋๋
propTypes
๋ฅผ ์ฌ์ฉํฉ๋๋ค. Component์ propTypes๋ฅผ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ defaultProp์ ์ค์ ํ๋ ๊ฒ๊ณผ ๋น์ทํฉ๋๋ค.
์ฐ์ ์ฝ๋ ์๋จ์ import ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ๋ถ๋ฌ์ต๋๋ค.
import PropTypes from 'prop-types';
๊ทธ๋ฆฌ๊ณ ํ๋จ์ propTypes๋ฅผ ์ง์ ํ๋ ์ฝ๋๋ฅผ ์ ๋ ฅํฉ๋๋ค.
MyComponent.propTypes = {
name : PropTypes.string
};
์ด๋ ๊ฒ ์ค์ ํด ์ฃผ๋ฉด name ๊ฐ์ ๋ฌด์กฐ๊ฑด ๋ฌธ์์ด(string) ํํ๋ก ์ ๋ฌํด์ผ ๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
๐isRequired๋ฅผ ์ฌ์ฉํ์ฌ ํ์ propTypes๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.
MyComponent.propTypes = {
name : PropTypes.string,
myNumber : PropTypes.number.isRequired
};
์์ ๊ฐ์ด ์ ๋ ฅํ๊ฒ ๋๋ฉด myNumber๋ฅผ ์ซ์๊ฐ ํ์์ธ props๋ก ์ง์ ํ ์ํ์ธ๋ฐ ๊ฐ์ ์ ๋๋ก ์ ๋ฌํ์ง ์์ผ๋ฉด ๊ฒฝ๊ณ ๋ฉ์ธ์ง๊ฐ ๋ํ๋ฉ๋๋ค.
๐ classํ Component์์ props์ฌ์ฉ
classํ Component์์ props๋ฅผ ์ฌ์ฉํ ๋๋ this.props
๋ฅผ ์กฐํํ๋ฉด ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ defaultProps์ propTypes๋ ๋๊ฐ์ ๋ฐฉ์์ผ๋ก ์ค์ ํ ์ ์์ต๋๋ค.
import { Component } from 'react';
class MyComponet extends Component{
render(){
const { name, myNumber } = this.props; //๋น๊ตฌ์กฐํ ํ ๋น
return (
<div>
Hi, My name is { name }!!;
mMy favorite number is { myNumber };
</div>
);
}
}