리μ‘νΈμ
State
μProps
μ λν λ΄μ©κ³ΌEvent
λ₯Ό ν΅ν΄ μ΄λ₯Ό νμ©νλ λ΄μ© λ±μ ν¬ν¨ν©λλ€. π
State
π리μ‘νΈλ₯Ό ν΅ν΄ λμ μΉμ ꡬννκ³ μ ν λ, λΉΌλμ μ μλ μλ κ°λ
μ€ νλκ° State
λ€. State
λ λ§ κ·Έλλ‘ μνλ₯Ό μλ―Ένλ©°, κ·Έ μνμ λμμ ν΄λΉ μ»΄ν¬λνΈλ₯Ό ν₯νλ€.
λν, State
λ μ»΄ν¬λνΈμ UI μ 보λ₯Ό μ§λ κ°μ²΄μ΄κΈ°λ νλ€. μ΄κ² λ¬΄μ¨ μλ―ΈμΈμ§ ν΄λμ€ν μ»΄ν¬λνΈμμ State
λ₯Ό μ΄λ»κ² μ μνλ μ§μ λν λ΄μ©κ³Ό ν¨κ» μμ보μ.
import React, { Component } from 'react';
class State extends Component {
constructor() {
super();
this.state = {
color: 'red',
};
}
handleColor = () => {
this.setState({
color: 'blue'
})
}
render() {
return (
<div>
<h1 style={{ color: this.state.color }}>Class Component | State</h1>
<button onClick={this.handleColor}>Click</button>
</div>
);
}
}
export default State;
State
λ₯Ό μ μμλ₯Ό νμ©νμ¬ μ€λͺ
ν΄λ³΄μ. μΌλ¨ constructor
λ₯Ό ν΅ν΄ state
μ μ΄κΈ° κ°μ μ€μ ν΄μ€λ€. μ΄ κ³Όμ μμ ν΄λΉ super()
λ₯Ό κΌ λ£μ΄μ£Όμ΄μΌ νλ€. ν΄λΉ super()
λ₯Ό μ νμλ‘ μ¬μ©ν΄μΌ νλμ§μ λν΄μλ λͺ
νν μ΄ν΄νμ§ λͺ»νκΈ° λλ¬Έμ, λ³λλ‘ κΈ°μ¬νλ€.
super()
μ λνμ¬μλ°μ€ν¬λ¦½νΈμ
class
μμsuper
λ λΆλͺ¨ ν΄λμ€μ μμ±μ λ΄μ§ λ©μλλ₯Ό λΆλ¬μ΄μ μλ―Ένλ€.extends
λ₯Ό μ¬μ©νμ¬ λΆλͺ¨ ν΄λμ€λ₯Ό ν΅ν΄ ν΄λμ€λ₯Ό μμ±νλ©΄super()
λ₯Ό μ¬μ©ν μ μκ² λλ€. κ·Έλ κ² λλ©΄ λ€μκ³Ό κ°μ μν©μ λ§λ€ μ μλ€.
class Person{ constructor(name, first, second){ this.name = name; this.first = first; this.second = second; } sum(){ return this.first+this.second; } } class PersonPlus extends Person{ constructor(name, first, second, third){ super(name, first, second); this.third = third; } sum(){ return super.sum()+this.third; } }
μμ κ°μ΄Person
μ΄λΌλclass
μμ νμλPersonPlus
μμsuper()
λ₯Ό μ¬μ©νμ¬ λΆλͺ¨ ν΄λμ€μ μμ±μλ₯Ό 곡μ νκ³ ,super
λ₯Ό ν΅ν΄ λΆλͺ¨μ λ©μλλ₯Ό μ¬μ©ν μ μλ€.
리μ‘νΈμμλ ν΄λΉsuper()
λ₯Όthis
μ¬μ©μ 쑰건μΌλ‘ κ°μ νλ€λ λΆλΆμ΄ μλλ° ν΄λΉ λ΄μ©μ λν΄μλ μ¬ν νμ΅μ΄ νμνκΈ° λλ¬Έμ, μ΄λ² 리μ‘νΈstate
μμλ μλ΅νκ² λ€.
setState()
π§λ³μκ° μλ state
λ₯Ό μ¬μ©νλ μ₯μ μ κ°μ λμ μΌλ‘ λ³κ²½ν μ μμ λ μ§κ°λ₯Ό λ°νν κ²μ΄λ€. setState()
λ μ΄λ¬ν state
κ°μ λ³κ²½ν μ μλ λ°©λ²μ΄λ€. μ μμμμλ setState()
λ₯Ό ν΅ν΄ μμμ μμ λ³κ²½νκ³ μ νμλ€.
handleColor = () => {
this.setState({
color: 'blue'
})
}
render() {
return (
<div>
<h1 style={{ color: this.state.color }}>Class Component | State</h1>
<button onClick={this.handleColor}>Click</button>
</div>
);
}
}
ν΄λΉ μμμμ setState()
λ₯Ό ν΅ν΄ color
κ°μ blue
λ‘ λ°κΎΌλ€λ κ²μ handelColor
λΌλ arrow function
μ ν΅ν΄ μ μν΄μ€λ€. κ·Έλ¦¬κ³ h1
νκ·Έμ style
μμ±μμ color
μ ν΄λΉνλ κ°μΌλ‘ ν΄λΉ state
κ°μ λμ
νκ³ , ν΄λΉ state
κ°μ λ³κ²½νκΈ° μν΄ λ―Έλ¦¬ μ μν΄λμλ ν¨μλ₯Ό button
νκ·Έμ onClick
μ΄λ²€νΈμ μ°λνμ¬ λμ
ν΄μ€λ€. κ·Έλ λ€λ©΄ λ²νΌμ ν΄λ¦νμ λ, h1
νκ·Έμ ν
μ€νΈ μμ΄ λ³ννλ κ²μ νμΈν μ μμ κ²μ΄λ€.
μμ κ°μ΄ state
κ°μ λ³νμμΌ λμ μΈ μΉ κ΅¬μΆμ νμ©ν μ μλ€. μΆκ°μ μΌλ‘, ν¨μν μ»΄ν¬λνΈμ κ²½μ° useState
λΌλ κ²μ νμ©νμ¬ state
κ°κ³Ό λ³κ²½ ν¨μμ λν΄ μΌκ΄μ μΌλ‘ μ μν μ μλ€.
props
ποΈstate
μ λν΄ μ΄ν΄νλ€λ©΄ μ΄μ props
μ λν΄ μ΄ν΄νλ©΄μ μ»΄ν¬λνΈλ₯Ό λ€λ£¨κΈ° μν μ€λΉλ₯Ό νμ€νκ² ν΄λ³΄μ. props
λ λ§ κ·Έλλ‘ μ»΄ν¬λνΈ μμ± κ°μ μλ―Ένλ©°, μμΈν λ§νμλ©΄ λΆλͺ¨ μ»΄ν¬λνΈλ‘ λΆν° μ λ¬ λ°μ λ°μ΄ν° κ°μ²΄λ₯Ό μλ―Ένλ€.
μ΄κ² μ¬λ λ§μΈκ° μΆλ€λ©΄ κ·Έκ² μ μμ΄λ€. π μκ΄΄κ°μ λΉ μ§μ§ λ§κ³ μ’ λ μ½κ² μμ보μ.
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}/>
</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>
</div>
);
}
}
export default State;
μμ κ°μ΄ λ κ°μ§ μ»΄ν¬λνΈκ° μ μλμ΄ μλ€κ³ κ°μ νμ. Parent
μ»΄ν¬λνΈλ μλ μμ±λ Child
μ»΄ν¬λνΈλ₯Ό λΆλ¬μ μ¬μ©νκ³ μ΄λ¦λλ‘ λΆλͺ¨ μμμ κ΄κ³λ₯Ό κ°λλ€. ν΄λΉ μν©μμ Child
λ Parent
μ»΄ν¬λνΈμ κ°μ μ κ·ΌνκΈ° μν΄ μ΄λ»κ² ν΄μΌ ν κΉ?
μ°μ μ μμμ Parent
μ»΄ν¬λνΈμμ Child
μ»΄ν¬λνΈλ₯Ό λΆλ¬μ μ¬μ©νλ κ³Όμ μμ props
λ₯Ό λκΈ°κΈ° μν΄ Parent
μ state
κ°μΈ blue
λ₯Ό this.state.color
λ₯Ό ν΅ν΄ μ λ¬ν΄μ€λ€. κ·Έλ¦¬κ³ ν΄λΉ props
λ₯Ό titleColor
λΌκ³ μ μνλ€.
κ·Έλ λ€λ©΄ μ΄μ Child
μ»΄ν¬λνΈλ titleColor
λΌλ κ°μ props
κ°μ²΄λ₯Ό ν΅ν΄ μ κ·Ό κ°λ₯νλ€. κ·Έλ κ² Child
μ»΄ν¬λνΈμμ this.props.titleColor
λ₯Ό ν΅ν΄ λ겨 λ°μ props
κ°μ μ κ·Όνκ³ μ΄λ₯Ό νμ©ν μ μλ κ²μ΄λ€.
λν props
λ₯Ό ν΅ν΄ state
κ° λΏλ§ μλλΌ setState
λ₯Ό νμ©νλ event handler
λν μ λ¬ν μ μλ€.
props
λ₯Ό ν΅ν ν¨μ μ λ¬ π¬// 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;
// 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>
<button onClick={this.props.changeColor}>Click</button>
</div>
);
}
}
export default State;
μ΄μ΄μ§λ μμλ setState
λΆλΆμμ button
μ ν΅ν΄ h1
νκ·Έμ μμ λ°κΎΈλ κ²κ³Ό κ°μ μμμ΄λ€. λ€λ₯Έ μ μ΄ μλ€λ©΄, event handling
μ λΆλͺ¨ μ»΄ν¬λνΈκ° μλ μμ μ»΄ν¬λνΈμμ μ§ννλ€λ μ μ΄λ€. κ·Έλ¬κΈ° μν΄μ λΆλͺ¨ μ»΄ν¬λνΈμμ μ μν state
λ₯Ό λ³κ²½ν μ μλ setState
κ° λ€μ΄κ° event handler
ν¨μλ₯Ό μμ κ°μ΄ μ λ¬νλ κ²μ΄λ€.
ν¨μλ₯Ό μ λ¬νλ λ°©μμ μμ κ° μ λ¬ λ°©μκ³Ό λμΌνλ€. changeColor={this.handleColor}
λ₯Ό ν΅ν΄ μ λ¬νκ³ μ νλ props
ν¨μλ₯Ό changeColor
λΌλ μ΄λ¦μΌλ‘ μ λ¬νλ€. κ·Έλ¦¬κ³ μ μμ λ§μ°¬κ°μ§λ‘ μμ μμμμ props
κ°μ²΄λ₯Ό ν΅ν΄ ν¨μλ₯Ό μ λ¬ λ°μ μ΄λ²€νΈμ λ°λ‘ μ¬μ©νλ©΄ λλ€.
μμ κ°μ λ°©μμ νμ©νλ©΄ μ»΄ν¬λνΈμ μ»΄ν¬λνΈνλ₯Ό μ§ννλ κ³Όμ μμ μμ λ‘κ² λΆλͺ¨ μμμ λ°μ΄ν°λ₯Ό 곡μ ν μ μλ€.
μ¬μ€ νμ΅νλ€ λ³΄λ, state
μ props
λΌλ λΆλΆμ μ€μ λ‘ μ μ©νλ©΄μ νμ΅νλ κ³Όμ μμ λμ± μ΄ν΄κ° κΉμ΄μ§λ κ² κ°λ€. μ΄λ₯Ό νμ©νμ¬ μ§ν μ€μΈ νλ‘μ νΈμ μ»΄ν¬λνΈνλ₯Ό μνν μ§νν ν νμ΅νλ λ΄μ©μ λμ§μ΄ 보λ κ²λ μ’μ κ² κ°λ€.
state
λ μ»΄ν¬λνΈμ μνμ΄λ©° μ»΄ν¬λνΈκ° κ°λ κ°μ μλ―Ένλ€.props
λ μ»΄ν¬λνΈ μμ±μΌλ‘ λΆλͺ¨ μ»΄ν¬λνΈλ‘ λΆν° μμ λ°λ λ°μ΄ν°λ₯Ό μλ―Ένλ€.setState
λ₯Ό ν΅ν΄ state
κ°μ λ³κ²½ν μ μμΌλ©°, μ΄λ₯Ό μ΄λ²€νΈ νΈλ€λ§μ νμ©ν μ μλ€.props
λ₯Ό ν΅ν΄ λΆλͺ¨ μμμ state
λ₯Ό μμμ λ°μν μ μκ³ , μ΄λ₯Ό λ³κ²½ν μλ μλ€.(State λμ΄μ¬λ¦¬κΈ°)κ·ΈλΌ 20000 ππ»