์ฒ์ state,props๊ฐ๋ ์ ๋ค์์ ๋๋ ์ดํด๊ฐ ์๋์ ๋ฉ๋ถ์ด์์ง๋ง ์ง์ ํ๋ก์ ํธ์ ์ฝ๋๋ฅผ ์ฌ์ฉํด๋ณด๋๊น ์ ์ฐจ ์ดํด๊ฐ ๋๊ณ ์๋ค~! ๊ทธ๋๋ ๋ ํ์คํ ์ดํด๋ฅผ ์ํด ๊ฐ๋ ์ ์ ๋ฆฌ๋ฅผ ํด๋ณด์!
์ฐ๋ฆฌ๊ฐ ๋จผ์ ์์์ผํ ๊ฒ์ Props
์ State
๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋ ์ฌ์ฉํ๋ ๊ฐ๋
์ด๋ผ๋ ๊ฒ์ด๋ค.
State
์ปดํฌ๋ํธ ๋ด๋ถ์์ ๊ฐ์ง๊ณ ์๋ ์ปดํฌ๋ํธ์ ์ํ๊ฐ
state๋ ํ๋ฉด์ ๋ณด์ฌ์ค ์ปดํฌ๋ํธ์ ์ ๋ณด(์ํ)๋ฅผ ์ง๋๊ณ ์๋ ๊ฐ์ฒด
๋ณด์ฌ์ง๊ธฐ ์ํด ๋ฐ๋์ ๋ ๋ ํ์
import React from 'react';
class State extends React.Component {
constructor() {
super();//this๊ฐ state์ปดํฌ๋ํธ๋ฅผ ๋ฐ๋ผ๋ณผ ์ ์๊ฒํด์ฃผ๋ ๊ฒ์ด super์ ์ญํ
this.state = {//์ปดํฌ๋ํธ์ state๋ ๊ฐ์ฒด. color_key๊ฐ, red_value๊ฐ
color: 'red'
};
}
render() {
return (
<div>
<h1>Class Component | State</h1>
</div>
);
}
}
export default State;
State์์ ์ํ๊ฐ์ ์ค์ ํ๋ ์ด์ ๋?
๊ฒฐ๊ตญ ์ปดํฌ๋ํธ ์์ ์์์์ ๊ทธ ์ํ๊ฐ์ ๋ฐ์ํด์ ๋ฐ์ดํฐ๊ฐ ๋ฐ๋ ๋๋ง๋ค ํจ์จ์ ์ผ๋ก ํ๋ฉด(UI)์ ๋ํ๋ด๊ธฐ ์ํจ์ด๋ค.
์ค์ ์ฌ์ฉ์์
import React, { Component } from 'react';
export class State extends Component {
constructor() {
super();
this.state = {
color: 'red'
};
}
render() {
return (
<div>
<h1 style={{ color: this.state.color }}>Class Component| State</h1> //this๋ ํ์ฌ state์ปดํฌ๋ํธ๋ฅผ ์๋ฏธํ๋ ๊ฒ. ๊ฒฐ๊ตญ state๋ฅผ ํตํด ๋ฆฌํด๋ฌธ ์์ ์๋ UI๋ฅผ ๊ด๋ฆฌ
</div>
);
}
}
export default State;
Event &setState
import React, { Component } from 'react';
export class State extends Component {
constructor() {
super();
this.state = {
color: 'red'
};
}
handleColor = () => {
this.setState({
color: 'blue'
})// setState๊ฐ ํตํด state ๋ณ๊ฒฝํด์ค ์ ์๋ค.
}
render() {
return (
<div>
<h1 style={{ color: this.state.color }}>Class Component | State</h1>
<button onClick={this.handleColor}>Click</button>
// addEventListenerํ ํ์์์ด jsx์์๋ค๊ฐ onClickํตํด ์ด๋ฒคํธ ์ ์
this(์ปดํฌ๋ํธ)์์ handleColorํจ์๊ฐ ์คํ๋๊ฒ ํด์ค
</div>
);
}
}
export default State;
๐งํด๋์คํ ์ปดํฌ๋ํธ setState?
setState๋ ์ํฏ๊ฐ์ ๋ณ๊ฒฝํ ๋ ํธ์ถํ๋ ๋ฉ์๋๋ค.
seteState๋ฉ์๋๋ก ์
๋ ฅ๋ ๊ฐ์ฒด๋ ๊ธฐ์กด ์ํฏ๊ฐ๊ณผ ๋ณํฉ๋๋ค. ๋ํ ๋น๋๊ธฐ๋ก ์ํฏ๊ฐ์ ๋ณ๊ฒฝํ๋ค.
Props
// Parent.js
import React from 'react';
import Child from '../pages/Child/Child';
class Parent extends React.Component {
constructor() {
super();
this.state = {
color: 'red'
};
}
render() {
return (
<div>
<h1>Parent Component</h1>
<Child titleColor={this.state.color}/>
//{this.state.color}์ด๊ฒ ๊ฐ์ฒด๊ฐ์ผ๋ก props์ ์ ์ฅ์ด ๋๋ค.
</div>
);
}
}
export default State;
// Child.js
import React from 'react';
class Child extends React.Component {
render() {
// console.log(this.props);
return (
<div>
<h1 style={{color : this.props.titleColor}}>Child Component</h1>
/*this: ํด๋น ์ปดํฌ๋ํธ
this.props: ํด๋น ์ปดํฌ๋ํธ์ props๊ฐ์ฒด
this.props.titleColor: props๊ฐ์ฒด์ ํน์ key๊ฐ*/
<button onClick={this.props.changeColor}>Click</button>
</div>
);
}
}
export default State;