โ State๐ & Event
state : ์ํ ํ๋ฉด์ ๋ณด์ฌ์ค ์ปดํฌ๋ํธ์ UI ์ ๋ณด(์ํ)๋ฅผ ์ง๋๊ณ ์๋ย ๊ฐ์ฒด
โ State
๊ฐ์ฒด
- `constructor()` ์ ์์น. `constructor()`๋ ํ์ด์ง๊ฐ ๋ ๋๋ ๋ ์ด๊ธฐํ๋๋ ๊ฐ๋ค
constructor() {
super();
this.state = {
color: 'red',
};
}
<h1 style= >Class Component | State</h1>
// this : ํด๋น ์ปดํฌ๋ํธ
// this.state : ํด๋น ์ปดํฌ๋ํธ์ state ๊ฐ์ฒด
// this.state.color : state ๊ฐ์ฒด์ ํน์ key(color)๊ฐ. ์ฆ "red"
โ setState()
constructor()
์์ ์ ์ธ๋ state์ ๊ฐ์ ๋ณ๊ฒฝํ ๋ ์ฌ์ฉ
import React, { Component } from "react";
class State extends Component {
constructor() {
super();
this.state = {
color: "red",
};
}
// `handleColor`ํจ์๋ฅผ ํธ์ถํ ๋ state์ ๊ฐ์ ๋ณ๊ฒฝํ๊ฒ ๋ค = setState
handleColor = () => {
this.setState({
color: "blue",
});
};
render() {
return (
<div>
<h1 style=>Class Component | State</h1>
<button onClick={this.handleColor}>Click</button>
</div>
);
}
}
export default State;
โ Props & Event
props : properties(์์ฑ) props๋ ๋ถ๋ชจ component๋ก๋ถํฐ ์ ๋ฌ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ง๋๊ณ ์๋ ๊ฐ์ฒด
โprops ๊ฐ์ฒด
- Parent.js
- ๋ถ๋ชจ component์์ ์์ component๋ก state๊ฐ์ ์ ๋ฌํ๊ธฐ ์ํ ์ค๋น
<Child titleColor={this.state.color}/>
titleColor
๋ผ๋ Attribute๋ฅผ ์์๋ก ์ง์ ํ์ฌstate
๊ฐ์ฒด์color
๊ฐ์ ์ ๋ฌ
- ๋ถ๋ชจ component์์ ์์ component๋ก state๊ฐ์ ์ ๋ฌํ๊ธฐ ์ํ ์ค๋น
// Parent.js
import React from "react";
import Child from "../pages/Children/Children";
class Parent extends React.Component {
constructor() {
super();
this.state = {
color: "red",
};
}
render() {
return (
<div>
<h1>Parent Component</h1>
<Child titleColor={this.state.color} />
</div>
);
}
}
export default State;
- Child.js
-
์ปดํฌ๋ํธ ๋ด๋ถ์์ ์ ๋ฌ ๋ฐ์ props ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ ๊น?
{color : this.props.titleColor}
์ ๋ฌ๋ฐ์props
๊ฐ์ฒด์titleColor
๊ฐ
-
// Child.js
import React from "react";
class Child extends React.Component {
render() {
// console.log(this.props); ๋ถ๋ชจ๋ก ๋ถํฐ ์ ๋ฌ๋ฐ์ props๊ฐ ํ์ธ
return (
<div>
<h1 style=>Child Component</h1>
// this : ํด๋น ์ปดํฌ๋ํธ // this.props : ํด๋น ์ปดํฌ๋ํธ์ props ๊ฐ์ฒด // this.props.titleColor
: props ๊ฐ์ฒด์ ํน์ key(titleColor)๊ฐ. ์ฆ "red"
</div>
);
}
}
export default State;
โ Props & event
- ์์์๊ฒ ์ ๋ฌํ state๊ฐ๊ณผ ํจ์๋ฅผ ์ ์ธ
state
๋titleColor
๋ผ๋ Attribute๋ฅผ ํตํด ์ ๋ฌhandleColor
๋ฉ์๋๋changeColor
๋ผ๋ Attribute๋ฅผ ํตํด ์ ๋ฌ
// Parent.js
import React from "react";
import Child from "../pages/Children/Children";
class Parent extends React.Component {
constructor() {
super();
this.state = {
color: "red",
};
}
handleColor = () => {
this.setState({
color: "blue",
});
};
render() {
return (
<div>
<h1>Parent Component</h1>
<Child titleColor={this.state.color} changeColor={this.handleColor} />
</div>
);
}
}
export default State;
- ๋ถ๋ชจ์๊ฒ ์ ๋ฌ๋ฐ์ props๋ฅผ
h1
์ ์คํ์ผ๋ง์์ ์ฌ์ฉstyle=
button
์onClick
์ด๋ฒคํธ ๋ฐ์์ ํจ์ ํธ์ถonClick= this.props.changeColor}
// Child.js
import React from 'react';
class Child extends React.Component {
render() {
// console.log(this.props);
return (
<div>
<h1 style=>Child Component</h1>
<button onClick= this.props.changeColor}>Click</button>
</div>
);
}
}
export default State;
โ ๋ชฉํ!
- state์ ๊ฐ๋
์ ๋ํด ํ ๋ฌธ์ฅ์ผ๋ก ์ค๋ช
ํ ์ ์๋ค
- component์ UI ์ํ๊ฐ(์ด๊ธฐ ์ ํ ๊ฐ?)์ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฒด
- ๋ถ๋ชจ ์์์ state ๋ฐ์ดํฐ๋ฅผ ์์ ์์์์ ๋ฐ์์ํฌ ์ ์๋ค
- ์ด๋ฒคํธ๋ฅผ ํตํด state ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ฟ ์ ์๋ค
- setState()
- props์ ๊ฐ๋
์ ๋ํด ํ ๋ฌธ์ฅ์ผ๋ก ์ค๋ช
ํ ์ ์๋ค
- ๋ถ๋ชจ๋ก๋ถํฐ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ง๋๊ณ ์๋ ๊ฐ์ฒด
- props๋ ์ฝ๊ธฐ ์ ์ฉ
๋ถ๋ชจ state
-์์์ props
-์์ component
์ด๋ป๊ฒ ์ฐ๊ฒฐ๋๋์ง ๋ช ํํ ์ดํดํ๋ค- props ๊ฐ๋ ์ ํ์ฉํ์ฌ ์์ ์ปดํฌ๋ํธ์์ ์ผ์ด๋ ์ด๋ฒคํธ๋ก ๋ถ๋ชจ์ state ๊ฐ์ ๋ฐ๊ฟ ์ ์๋ค