[React ์คํฐ๋ Day3๐] React Component์ Props & state์ lifecycle์ ๋ํด ์์๋ณด์!(๋ฆฌ์ํธ ์ปดํฌ๋ํธ)
* ์ด ๊ธ์ ์ํ๋์ `์ฒ์ ๋ง๋ ๋ฆฌ์ํธ(React) ๊ฐ์ ๋ด์ฉ์ ์ ๋ฆฌํ ๊ฒ์๋ฌผ์ ๋๋ค.
์ฒ์ ๋ง๋ ๋ฆฌ์ํธ(React) - ์ํ
Ch05. Components
๋ฆฌ์ํธ๋ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ์ ๊ตฌ์กฐ์ด๋ค! ์ปดํฌ๋ํธ๋ค์ ๋ ๊ณ ๋ธ๋ญ์ ๋ผ์ ๋ฃ๋ฏ์ด ๊ตฌ์ฑํ๋ค.
React Component๋ ๋ฌด์จ ์ผ์ ํ ๊น?
์์ฑ(props)์ ๋ฐ์์ ๊ทธ์ ๋ง๋ react element๋ฅผ ๋ฐํํ๋ ์ญํ ์ ํ๋ค. (์ผ์ข ์ ํจ์๋ผ๊ณ ์ดํดํ๋ฉด ํธํ๋ค.)
โComponent(๋ถ์ด๋นต ํ) - Elemenet(๋ถ์ด๋นต)โ ์ด๋ผ๊ณ ๋น์ ํ ์ ์๋ค. ๊ฐ์ฒด์งํฅ์์ ๋์ค๋ class์ ์ธ์คํด์ค ๊ฐ๋ ๊ณผ ๋น์ทํ๋ค.
Props(Properties ์์ฑ๋ค)
Component์ ์ ๋ฌํ ๋ค์ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด์ด๋ค.
Component๋ฅผ ๋ถ์ด๋นต ํ์ด๋ผ๊ณ ํ๋ค๋ฉด, props๋ ๋ถ์ด๋นต์ ์ ์ฌ๋ฃ(์ํฌ๋ฆผ, ํฅ ๋ฑ)๋ผ๊ณ ๋น์ ํ ์ ์๋ค.
Props์ ํน์ง - Read-Only!
๊ฐ์ ๋ณ๊ฒฝํ ์ ์๊ณ ์ฝ์ ์๋ง ์๋ค. ๊ฐ์ ๋ณ๊ฒฝํ๊ณ ์ถ์ ๊ฒฝ์ฐ ์๋ก ๋ง๋ค๋ฉด ๋๋ค.
๋ชจ๋ react component๋ props๋ฅผ ์ง์ ๋ฐ๊ฟ ์ ์๊ณ , ๊ฐ์ Props์ ๋ํด์๋ ํญ์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ฃผ์ด์ผ ํ๋ค!
Props ์ฌ์ฉ๋ฒ - component์ props ์ ๋ฌํ๊ธฐ
์์)
function App(props) {
return (
<Profile name="Daeun" introduction="Hello, my name is Daeun" viewCount={1500}/>
)
}
props๋ ์๋์ ๊ฐ์ ํํ์ JS ๊ฐ์ฒด๊ฐ ๋๋ค.
{
name: "Daeun",
introduction: "Hello, my name is Daeun",
viewCount: 1500
}
์์) props์ ๊ฐ์ผ๋ก ์ปดํฌ๋ํธ๋ฅผ ๋ฃ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
function App(props) {
return (
<Layout width={2560} height={1440}
header={<Header title="Daeun's Blog"/>}
footer={<Footer/>}
/>
)
}
React.createElement()
React.createElement(type, [props], [...children])
์ฌ์ฉ ์์)
React.createElement(
Profile, // Component ์ด๋ฆ
{ // props
name: "Daeun",
introduction: "Hello, my name is Daeun",
viewCount: 1500
},
null // ํ์ Component๊ฐ ์์ผ๋ฏ๋ก
);
Component
๋ฆฌ์ํธ์์ Component๋ ํฌ๊ฒ Function Component
์ Class Component
๋ก ๋๋๋ค.
- function component: ์ฝ๋๊ฐ ๊ฐ๋จํ ๊ฒ์ด ์ฅ์
function Welcome(props) { return <h1>Hello, {props.name}</h1>; }
- class component: function ์ปดํฌ๋ํธ์ ๋นํด ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ๊ฐ์ง๋ค.
class Welcome extends React.Component { render() { return <h1>Hello, {this.props.name}</h1>; } }
React.Component๋ฅผ ์์ํด์ ๊ตฌ์ฑ๋๋ค.
์ค์!! - Component ์ด๋ฆ์ ํญ์ ๋๋ฌธ์๋ก ์์ํด์ผ ํ๋ค.
์๋ฌธ์๋ก ์์ํ๋ ์ปดํฌ๋ํธ๋ DOM ํ๊ทธ๋ก ์ธ์ํ๋ค๊ณ ํ๋ค.
์์)
// HTML div ํ๊ทธ๋ก ์ธ์
const element = <div />;
// Welcome์ด๋ผ๋ React Component๋ก ์ธ์
const element = <Welcome name="Daeun" />;
Component์ ๋ ๋๋ง
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
// React Component๋ก element๋ฅผ ๋ง๋ ๋ชจ์ต
const element = <Welcome name="Daeun" />; // name: "Daeun"์ด๋ผ๋ props๋ฅผ ๋ฃ์ด element ์์ฑ
// element๋ฅผ ๋ ๋๋ง(DOM์ ์
๋ฐ์ดํธ)
ReactDOM.render(
element,
document.getElementById('root')
);
Ch06. State and Lifecycle
Class Component์ ๊ด๋ จ๋ ๋ด์ฉ์ ๋ค๋ฃฌ ์ฑํฐ์ด๋ค.
State
state๋ ๋ฆฌ์ํธ component์ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฐ์ดํฐ๋ฅผ ๋งํ๋ค. state๋ ๊ฐ๋ฐ์๊ฐ ์ ์ํด ์ฌ์ฉํ๋ค.
state๋ ์ปดํฌ๋ํธ์ ๋ ๋๋ง๊ณผ ๊ด๋ จ๋์ด ์๋ค!!
๋ ๋๋ง์ด๋ ๋ฐ์ดํฐ ํ๋ฆ์ ์ฌ์ฉ๋๋ ๊ฐ๋ง state์ ํฌํจ์์ผ์ผ ํ๋ค. (state๊ฐ ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ component๊ฐ ๋ค์ ๋ ๋๋ง๋๊ธฐ ๋๋ฌธ์ด๋ค. ๋ ๋๋ง์ด๋ ๋ฐ์ดํฐ ํ๋ฆ์ ๊ด๋ จ ์๋ ๊ฒ์ state์ ํฌํจํ ๊ฒฝ์ฐ ๋ถํ์ํ ๊ฒฝ์ฐ์ ์ฌ๋ ๋๋ง์ด ์ผ์ด๋๊ฒ ๋๋ฏ๋ก ๋นํจ์จ์ ์ด๋ค.)
state๋ JS ๊ฐ์ฒด์ด๋ค!
class LikeButton extends React.Component {
constructor(props) { // ์์ฑ์
super(props),
this.state = { // class component์ ๊ฒฝ์ฐ state๋ฅผ ์์ฑ์(constructor)์์ ์ ์ํ๋ค.
liked: false
};
}
}
state๋ ์ผ๋ฐ ๋ณ์๋ฅผ ๋ค๋ฃจ๋ฏ์ด ์ง์ ์์ ํ๋ฉด ์๋๋ค! (setState๋ผ๋ ํจ์๋ฅผ ์ฌ์ฉ!)
React Component์ Lifecycle(์๋ช ์ฃผ๊ธฐ)
component์ ์์ฑ ์์ ๊ณผ ์ฌ๋ผ์ง๋ ์์ ์ด ์ ํด์ ธ ์๋ค.
- Mounting(์ถ์) - constructor
- Updating(์ธ์)
- Unmounting(์ฌ๋ง) - ์์ ์ปดํฌ๋ํธ์์ ํด๋น ์ปดํฌ๋ํธ๋ฅผ ๋์ด์ ํ์ํ์ง ์์ ๋
Component๊ฐ ๊ณ์ ์กด์ฌํ๋ ๊ฒ์ด ์๋๋ผ, ์๊ฐ์ ํ๋ฆ์ ๋ฐ๋ผ ์์ฑ๋๊ณ ์ ๋ฐ์ดํธ ๋๋ค๊ฐ ์ฌ๋ผ์ง๋ค!