๐ฃ props
- Component ์์ฑ์ ์ค์ ํ ๋ ์ฌ์ฉํ๋ ์์
- ํด๋น ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฌ์ ์ฌ์ฉํ๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์ฌ์ฉ๊ฐ๋ฅ
1๏ธโฃ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ ๋ pros ๊ฐ ์ง์ ํ๊ธฐ
๋ถ๋ชจ ์ปดํฌ๋ํธ์ธ App ์ปดํฌ๋ํธ์์ MyComponent์ props ๊ฐ์ ์ง์ , MyComponenet์์ props ์ฌ์ฉ
2๏ธโฃ ๋น๊ตฌ์กฐํ ํ ๋น ๋ฌธ๋ฒ์ ํตํด props ๋ด๋ถ ๊ฐ ์ถ์ถํ๊ธฐ
๊ฐ์ฒด์์ ๊ฐ์ ์ถ์ถํ๋ ๋ฌธ๋ฒ === ๋น๊ตฌ์กฐํ ํ ๋น(destructuring assignment) === ๊ตฌ์กฐ ๋ถํด ๋ฌธ๋ฒ
ํจ์์ ํ๋ผ๋ฏธํฐ๊ฐ ๊ฐ์ฒด๋ผ๋ฉด ๊ทธ ๊ฐ์ ๋ฐ๋ก ๋น๊ตฌ์กฐํํด์ ์ฌ์ฉํ ์ ์๋ค.
# ๊ฐ์ฒด์์ ๊ฐ์ ์ถ์ถํ๋ ๋น๊ตฌ์กฐํ ํ ๋น
const MyComponent = (props) => {
const { name, title } = props;
return (
<div>
์๋
ํ์ธ์, ์ ์ด๋ฆ์ {name} ์ด๊ณ , ์ด๊ฒ์ {title}์
๋๋ค.
<br />
</div>
);
};
# ๊ฐ์ฒด์ธ ํจ์ ํ๋ผ๋ฏธํฐ ๋น๊ตฌ์กฐํ ํ ๋น
const MyComponent = ({ name, title }) => {
return (
<div>
์๋
ํ์ธ์, ์ ์ด๋ฆ์ {name} ์ด๊ณ , ์ด๊ฒ์ {title}์
๋๋ค.
<br />
</div>
);
};
3๏ธโฃ propTypes๋ฅผ ํตํ props ๊ฒ์ฆ
๋ฐฑ์๋์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ ๋ฐ์ ๋ type์ ์ง์ ํด์ค์ผํ๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ propTypes๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํฌ๋ํธ์ ํ์ props๋ฅผ ์ง์ ํ๊ฑฐ๋ props์ ํ์ ์ ์ง์ ํ ์ ์๋ค.
ํ์
์ ์ง์ ํ๊ธฐ ์ํด์๋ ์ฐ์ import ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ 'prop-types' ๋ฅผ ๋ถ๋ฌ์์ผ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์์ ๊ฐ์ด type์ ์ง์ ํ ๋ค์ App.js ์์ string์ผ๋ก ์ง์ ๋ props์ ๊ฐ์ผ๋ก number๋ฅผ ์ ๋ฌํ๋ฉด Console์ ์๋ฌ๋ฉ์์ง๊ฐ ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
4๏ธโฃ ํด๋์คํ ์ปดํฌ๋ํธ์์ props ์ฌ์ฉํ๊ธฐ
# MyComponent.js
class MyComponent extends Component {
render() {
const { name, favoriteNumber, children } = this.props; // ๋น๊ตฌ์กฐํ ํ ๋น
return (
.
.
ํด๋์คํ ์ปดํฌ๋ํธ ๋ด๋ถ์์ defaultProps์ proTypes ์ค์
class MyComponent extends Component {
static defaultProps = {
name: '๊ธฐ๋ณธ ์ด๋ฆ'
};
static propTypes = {
name: Protypes.string,
favoriteNumber: PropTypes.number.isRequired
};
render() {
const { name, favoriteNumber, children } = this.props;
return(...);
}
}
๐ state
state๋ ์ปดํฌ๋ํธ ๋ด๋ถ์์ ๋ฐ๋ ์ ์๋ ๊ฐ
props๋ ์ปดํฌ๋ํธ๊ฐ ์ฌ์ฉ๋๋ ๊ณผ์ ์์ ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ์ค์ ํ๋ ๊ฐ์ด๋ฉฐ, ์ปดํฌ๋ํธ ์์ ์ ํด๋น props๋ฅผ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก๋ง ์ฌ์ฉํ ์ ์๋ค.
๋ฆฌ์กํธ์ state 2๊ฐ์ง
- state์๋ ํด๋์คํ ์ปดํฌ๋ํธ๊ฐ ์ง๋๊ณ ์๋ state.
- ํจ์ ์ปดํฌ๋ํธ์์ useState๋ผ๋ ํจ์๋ฅผ ํตํด ์ฌ์ฉํ๋ state.
# Counter.js
class Count extends Component {
constructor(props) {
super(props);
this.state = {
// state ์ด๊ธฐ๊ฐ ์ค์
number: 0,
};
}
render() {
const { number } = this.state; // this.state๋ฅผ ์ฌ์ฉํ์ฌ state ์กฐํ
return (
<div>
<h1>{number}</h1>
<button
onClick={() => {
this.setState({ number: number + 1 });
}}
>
+1
</button>
</div>
);
}
}
์ปดํฌ๋ํธ์์ state๋ฅผ ์ค์ ํ ๋๋ constructor ๋ฉ์๋๋ฅผ ์์ฑํ์ฌ ์ค์ ํ๋ค.
ํด๋์คํ ์ปดํฌ๋ํธ์์ constructor๋ฅผ ์์ฑํ ๋๋ ๋ฐ๋์ super(props)๋ฅผ ํธ์ถํด์ค์ผ ํ๋ค.
์ปดํฌ๋ํธ์ state๋ ๊ฐ์ฒด ํ์์ด์ด์ผ ํ๋ค.
constructor ๋ฉ์๋๋ rendering ๋ ๋ ์ด๊ธฐํ๋ฅผ ๋ด๋น.
์ด๋ฒคํธ๋ก ์ค์ ํ ํจ์๋ฅผ ๋ฃ์ด ์ค๋๋ ํ์ดํ ํจ์ ๋ฌธ๋ฒ์ ์ฌ์ฉํ์ฌ์ผ ํ๋ค.
ํจ์ ๋ด๋ถ์์๋ this.setState ํจ์๋ฅผ ์ฌ์ฉํ์ฌ state ๊ฐ์ ๋ฐ๊ฟ ์ ์๋ค.
constructor ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ง ์๊ณ state ์ด๊น๊ฐ ์ค์
# Counter.js
class Counter extends Component {
state = {
number: 0,
fixedNumber: 0
};
render()...
๐ฅฏ state๋ฅผ ์ฌ์ฉํ ๋ ์ฃผ์ ์ฌํญ
โญ๏ธ ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด๋ฅผ ์
๋ฐ์ดํธ ํด์ผํ ๋
=> ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด ์ฌ๋ณธ์ ๋ง๋ค๊ณ ๊ทธ ์ฌ๋ณธ์ ๊ฐ์ ์
๋ฐ์ดํธ ํ ํ, ๊ทธ ์ฌ๋ณธ์ ์ํ๋ฅผ setState ํน์ Setter ํจ์๋ฅผ ํตํด ์
๋ฐ์ดํธ ํ๋ค.
# i.e
//๊ฐ์ฒด ๋ค๋ฃจ๊ธฐ
const array = [
{ id: 1, value: true},
{ id: 2, value: true},
{ id: 3, value: false},
];
let nextArray = array.concat({id:4}); // ์ํญ๋ชฉ ์ถ๊ฐ
nextArray.filter(item => item.id !== 2); // id๊ฐ 2์ธ ํญ๋ชฉ ์ ๊ฑฐ
nextArray.map(item => item.id === 1 ? {...item, value: false} : item));
// id๊ฐ 1์ธ ํญ๋ชฉ์ value๋ฅผ false๋ก ์ค์
โจโจโจโจโจ
๊ฐ์ฒด์ ๋ํ ์ฌ๋ณธ์ ๋ง๋ค๋๋ spread ์ฐ์ฐ์ ....
๋ฐฐ์ด์ ๋ํ ์ฌ๋ณธ์ ๋ง๋ค๋๋ ๋ฐฐ์ด์ ๋ด์ฅํจ์ ์ฌ์ฉ
โจโจโจโจโจ
props, state ํ์ฉ์์
- ๋ถ๋ชจ ์ปดํฌ๋ํธ์ธ App ์์ this.state ๋ก content๋ผ๋ ์ด๋ฆ์ ๊ฐ์ฒด ๋ฐ์ดํฐ๋ฅผ ์์ฑ
- ์์ ์ปดํฌ๋ํธ์ธ TOC ์ this.state.content๋ก ๊ฐ์ฒด ๋ฐ์ดํฐ ์ ๋ฌ
- TOC ์ปดํฌ๋ํธ์์ ๋ฐ์ ๊ฐ์ฒด๋ฐ์ดํฐ๋ฅผ while ๋ฐ๋ชฉ๋ฌธ์ ์ฌ์ฉํ์ฌ list์ DOM์ ์์ฑํ์ฌ ์ ๋ฌ
'React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
React | do not nest ternary expression (Nextjs , typescript, airbnb style guide) (0) | 2022.02.10 |
---|---|
React | ๋์ ๋ผ์ฐํ (0) | 2022.01.26 |
React | ๋ก๊ทธ์ธ ๋ฒํผ ํ์ฑํ(React๋ฅผ ์ด์ฉํ์ฌ) (0) | 2022.01.13 |
React | Router ์์ฝ (0) | 2022.01.12 |
React | Routes Component & Sass (0) | 2022.01.11 |