๐ฅ ์ค๋ ์ด๋์ ๋์ ํด๋ณด์ จ๊ณ , ๋ฌด์์ ๋ฐฐ์ฐ์ จ๋์?
๐ ํ์ตํ์๋ฉด์ ๊ถ๊ธํ์ ๋ถ๋ถ์ด๋, ์ด๋ ค์ ๋ ์ ์ ๋ญ๊น์?
constructor์์ this๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด this๋ฅผ ์ฌ์ฉํ๋ ๊ตฌ๋ฌธ๋ณด๋ค ๋จผ์ super ๋ฉ์๋๋ฅผ ํธ์ถํด์ผ ํ๋ค. ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ท์น์ด๊ณ super๋ ๊ณง ๋ถ๋ชจ ํด๋์ค, ์ฆ ์์๋ฐ๊ณ ์๋ ํด๋์ค๋ฅผ ์๋ฏธํ๋ค. ํด๋์ค ๊ธฐ๋ฐ ์ปดํฌ๋ํธ๋ React์ Component๊ฐ ๋ถ๋ชจ ํด๋์ค์ด๋ค.
super ๋ฉ์๋์ ๋งค๊ฐ๋ณ์๋ก props๋ฅผ ์ ๋ฌํ์ง ์์๋ ๋ฆฌ์กํธ๋ props๋ฅผ ์ธํ ํด์ค๋ค. ์์ฑ์ ํจ์ ๋ด์์ this.props๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค๋ฉด
super(props)
๋ก props๋ฅผ ์ด๊ธฐํํด์ค์ผ ํ๋ค.
๐ ๋ด์ผ์ ์ด๋ป๊ฒ ํด๋ณด๊ณ ์ถ์ผ์ธ์?
- react์ ํด๋์ค ๊ธฐ๋ฐ ์ปดํฌ๋ํธ ์๋ช ์ฃผ๊ธฐ ์์๋ณด๊ธฐ
์ปดํฌ๋ํธ๋ฅผ ๊ตฌ์ถํ๋ ๋๋ค๋ฅธ ๋ฐฉ๋ฒ : ํด๋์ค ์ปดํฌ๋ํธ
๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ๋ฒ
- ๐ ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ธ ํด๋์ค๋ฅผ ์ด์ฉํ์ฌ ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๋ค.
- ๐ ์ต๊ทผ์ ๊ธฐ๋ณธ๊ฐ์ ํจ์ํ ์ปดํฌ๋ํธ๋ก ๊ตฌ์ฑ๋์ง๋ง ๋ฆฌ์กํธ 16.8์ด์ ์๋ state์ side effect๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด์๋ ํด๋์ค ๊ธฐ๋ฐ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
- ๐ ๋ฆฌ์กํธ 16.8์์ ๋ฆฌ์กํธ ํ ์ด๋ผ๋ ๊ฐ๋ ์ด ๋์ ๋์ด ํด๋์ค ๊ธฐ๋ฐ์์๋ง ๊ด๋ฆฌํ ์ ์์๋ state์ side effect๋ฅผ ํจ์ํ ์ปดํฌ๋ํธ์์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค. ํ ์ด๋ผ๋๊ฑด ํด๋์ค ๊ธฐ๋ฐ์์๋ ์ฌ์ฉํ ์ ์๋ค.
- ๐
React.Component
render()
๋ฉ์๋์์ ํ๋ฉด์ ๋ ๋๋งํ๊ณ ์ถ์ JSX๋ฅผ ๋ฐํํ๋ฉด ๋๋ค. ํจ์ํ ์ปดํฌ๋ํธ์์์ ๋ฐํ๋ฌธ๊ณผ ๋์ผํ๋ค.props
๋ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ง ์๊ณ this.props๋ก ํธ์ถํ๋ค. ์ด๋ React์ Component๋ฅผ ์์๋ฐ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
// ๊ฐ์ ํ๋ฉด์ ๋ ๋๋งํ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ
//๐ ํด๋์ค ๊ธฐ๋ฐ ์ปดํฌ๋ํธ
class User extends React.Component {
render() {
return <div>User Name : {this.props.name}</div>;
}
}
// ๐ ํจ์ํ ์ปดํฌ๋ํธ
const User = (props) => {
return <div>User Name : {props.name}</div>;
};
state์ ์ด๋ฒคํธ
- ๐ state๋ฅผ ์ ์ํ ๋๋ ํด๋์ค์ ์์ฑ์(
constructor(){}
)์์ ์ด๊ธฐํํ๋ค.- ํด๋์ค๊ฐ
constructor
๋ฅผ ์ ์ํ๊ณ ๋ค๋ฅธ ํด๋์ค๋ฅผ ์์ ๋ฐ์ผ๋ฉดsuper()
๋ฅผ ํตํด ์์ ํด๋์ค์ ์์ฑ์๋ฅผ ํธ์ถํด์ผ ํ๋ค.
- ํด๋์ค๊ฐ
๐ ์ํ๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ ํ ๋๋
this.setState()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค. ์๋ก์ด ์ํ๋ฅผ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ๋ฉฐ ํ์ฌ ์กด์ฌํ๋ ์ํ์ ์๋ก ์ ๋ฌ๋ ๊ฐ์ฒด(๋๋ ๊ฐฑ์ ํจ์๊ฐ ๋ฐํํ๋ ๊ฐ์ฒด)๋ฅผ ๋ณํฉํ๋ค.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
class User extends React.Component { constructor() { //this๋ฅผ ์ฌ์ฉํ๊ธฐ ์ super๋ฅผ ํธ์ถํ์ง ์์ผ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. super(); //ํด๋์ค ์ปดํฌ๋ํธ์ ์ํ๋ ๊ฐ์ฒด ํํ์ฌ์ผ ํ๋ค. this.state = { showName: true, name: "yeeunkim" }; } changeUserName() { this.setState((prev) => ({ showName: !prev.showName })); } render() { return ( <> {this.state.showName && <div>User.name : {this.state.name} </div>} <button onClick={this.changeUserName.bind(this)}> toggle show username </button> </> ); } }
๐ค constructor์์ super๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ์ด์ ๋?
- Class & State์์ Constructor์ Super๋ฅผ ์ฐ๋ ์ด์
- Dan Abramov - ์ super(props) ๋ฅผ ๋ช
์ํด ์ค์ผ ํ๋๊ฐ?
- ์ด ๋ธ๋ก๊ทธ์์ ๋งํ๋ฏ
ํด๋์ค ํ๋
๋ฅผ ์ฌ์ฉํด์ state ๋ณ์๋ฅผ ์ ์ธํ๋ฉด constructor ๋ด๋ถ์์ ์ํ ๊ฐ์ ์ด๊ธฐํํ์ง ์์๋ ๋๋ค.
- ์ด ๋ธ๋ก๊ทธ์์ ๋งํ๋ฏ