REACT μ»΄ν¬λνΈ μλͺ μ£ΌκΈ° (Life Cycle)
π½ μ»΄ν¬λνΈ μλͺ μ£ΌκΈ° (Life Cycle)
리μ‘νΈμ μ»΄ν¬λνΈλ μλͺ
μ£ΌκΈ°λ₯Ό κ°λλ€. μλͺ
μ£ΌκΈ°λ μ»΄ν¬λνΈκ° μμ±λκ³ , μ¬μ©λκ³ , μλ©Έλλ μΌλ ¨μ κ³Όμ μ λ»νκ³ , μλͺ
μ£ΌκΈ° μμμλ νΉμ μμ μ μλμΌλ‘ νΈμΆλλ λ©μλκ° μλλ°, μ΄λ₯Ό λΌμ΄ν μ¬μ΄ν΄ μ΄λ²€νΈλΌκ³ νλ€.
μ΄λ€ λΌμ΄ν μ¬μ΄ν΄ μ΄λ²€νΈλ ν λ²λ§ μ€νλκ³ , μ΄λ€ μ΄λ²€νΈλ κ³μν΄μ μ€νλκΈ°λ νλ€. λΌμ΄ν μ¬μ΄ν΄ λ©μλλ ν΄λμ€ μ»΄ν¬λνΈμμλ§ μ¬μ©ν μ μλ€.
π½ λΌμ΄ν μ¬μ΄ν΄ μ΄λ²€νΈμ λΆλ₯
λΌμ΄ν μ¬μ΄ν΄ λ©μλμ μ’ λ₯λ μ΄ 9κ°μ§μ΄λ€.
- will μ λμ¬κ° λΆμ λ©μλ: μ΄λ€ μμ μ μλνκΈ° μ μ€ν
- did μ λμ¬κ° λΆμ λ©μλ: μ΄λ€ μμ μ μλν νμ μ€ν
λΌμ΄ν μ¬μ΄ν΄μ 3κ°μ§ Mount, Update, Unmount μΉ΄ν κ³ λ¦¬λ‘ λλλ€. κ° λΆλ₯μ λ°λΌ μ΄λ²€νΈκ° λ°μλλ νμκ° λ€λ₯΄λ€.
Mount
DOMμ΄ μμ±λκ³ μΉ λΈλΌμ°μ μμ λνλλ κ²μ MountλΌκ³ νλ€. ν λ²λ§ μ€νλλ€.
- constructor: μ»΄ν¬λνΈλ₯Ό μλ‘ λ§λ€ λλ§λ€ νΈμΆλλ ν΄λμ€ μμ±μ λ©μλ
- getDerivedStateFromProps: propsμ μλ κ°μ stateμ λ£μ λ μ¬μ©νλ λ©μλ
- componentWillMount(): DOMμ μ½μ νκΈ° μ μ μ€νλλ€. λ§μ΄ν μ€μ΄λ―λ‘ propsλ stateμ μ κ·Όν μλ μμΌλ μ΄ κ°μ λ³κ²½νλ©΄ μ λλ€. λν μμ§ render() ν¨μκ° μ€ν μ μ΄κΈ° λλ¬Έμ DOMμ μ κ·Όν μ μλ€.
- render: μ€λΉν UI λ λλ§
- componentDidMount(): DOMμ μ½μ λμ΄ λ λλ§μ΄ μλ£λ ν μ€νλλ€. DOMμ μ κ·Όν μ μμΌλ©°, μ£Όλ‘ μ΄ λ¨κ³μμ AJAX μμ²μ νκ±°λ setTimeout, setInterval κ°μ μμ μ μ€ννλ€.
Update
μμ±μ΄λ μνκ° λ³κ²½λμ΄ React μ리먼νΈλ₯Ό μ λ°μ΄νΈν λ λ°μνλ€.
- componentWillReceiveProps(nextProps): μ»΄ν¬λνΈκ° propsλ₯Ό λ°κΈ° μ§μ μ€νλλ€. λ°λ propsμ λν μ 보λ₯Ό 맀κ°λ³μλ‘ κ°λλ€.
- shouldComponentUpdate(nextProps, nextState): μ»΄ν¬λνΈ μ λ°μ΄νΈ μ§μ μ νΈμΆλλ λ©μλλ‘, μ»΄ν¬λνΈκ° 리λ λλ§μ ν΄μΌν μ§ λ§μμΌν μ§λ₯Ό κ²°μ νλ€. trueλ₯Ό λ°ννλ©΄ λ€μ λΌμ΄ν μ¬μ΄ν΄ λ©μλλ₯Ό κ³μ μ€ννκ³ , falseλ₯Ό λ°ννλ©΄ μμ μ μ€μ§(리λ λλ§ X)νλ€.
- componentWillUpdate(nextProps, nextState): μ»΄ν¬λνΈ λ³νλ₯Ό DOMμ λ°μνκΈ° λ°λ‘ μ§μ μ νΈμΆνλ€. μ΄ λ¨κ³μμ stateλ₯Ό λ³κ²½ν΄μλ μ λλ€. (무ν 루ν λ°μ)
- componentDidUpdate: μ»΄ν¬λνΈ μ λ°μ΄νΈ μμ μ΄ λ€ λλ ν νΈμΆνλ€. μ΄ λ¨κ³μμλ renderκ° μλ£λμμΌλ―λ‘ DOMμ μ κ·Όν μ μλ€.
Unmount
React μ리먼νΈλ₯Ό DOMμμ μ κ±°ν λ λ°μνλ©° ν λ²λ§ μ€νλλ€.
- componentWillUnmount(): μ»΄ν¬λνΈλ₯Ό DOMμμ μ κ±°νκΈ° μ μ μ€νλλ©°, μ£Όλ‘ μ°κ²°νλ μ΄λ²€νΈ 리μ€λλ₯Ό μ κ±°νλ λ±μ μ¬λ¬ μ 리 μμ μ νλ€.
π½ μλͺ μ£ΌκΈ° μ΄λ²€νΈ μμ μ½λ
const root = ReactDOM.createRoot(document.getElementById('root'));
function tick() {
const element = (
<div>
<h1>Hello, world!</h1>
<h2>It is {new Date().toLocaleTimeString()}.</h2>
</div>
);
root.render(element);
}
setInterval(tick, 1000);
tick μ»΄ν¬λνΈλ μκ°μ΄ λ³νλ κ²μ 1000msλ§λ€ μ λ°μ΄νΈνλ κΈ°λ₯μ μννλ€. λ€μ μꡬμ¬νμ λ§κ² μ½λλ₯Ό μμ νλ€.
- μ»΄ν¬λνΈλ₯Ό μ¬μ¬μ©ν μ μλλ‘ μΊ‘μν
- μ»΄ν¬λνΈ μ€μ€λ‘ νμ΄λ¨Έ μ€μ νκ³ μ λ°μ΄νΈ
componentDidMount() {
this.timerID = setInterval(
() => this.tick(),
1000
);
}
componentWillUnmount() {
clearInterval(this.timerID);
}
tick()μ΄ μ²μ DOMμ λ λλ§ λ λλ§λ€ νμ΄λ¨Έλ₯Ό μ€μ νκ³ , λ tick()μ μν΄ μμ±λ DOMμ΄ μμ λ λλ§λ€ νμ΄λ¨Έλ₯Ό ν΄μ νκΈ° μν΄ componentDidMount() λ©μλμ componentWillUnmount() λ©μλλ₯Ό μ¬μ©νλ€.
class Clock extends React.Component {
constructor(props) {
super(props);
this.state = {date: new Date()};
}
componentDidMount() {
this.timerID = setInterval(
() => this.tick(),
1000
);
}
componentWillUnmount() {
clearInterval(this.timerID);
}
tick() {
this.setState({
date: new Date()
});
}
render() {
return (
<div>
<h1>Hello, world!</h1>
<h2>It is {this.state.date.toLocaleTimeString()}.</h2>
</div>
);
}
}
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<Clock />);
π½ Reference
React.js - μ»΄ν¬λνΈ μλͺ μ£ΌκΈ°(Life Cycle)
리μ‘νΈ μ»΄ν¬λνΈ μλͺ μ£ΌκΈ°(Life Cycle) 리μ‘νΈμ μ»΄ν¬λνΈλ μλͺ μ£ΌκΈ°λ₯Ό κ°μ§λ€. μλͺ μ£ΌκΈ°λ μ»΄ν¬λνΈκ° μμ±λκ³ μ¬μ©λκ³ μλ©Έλ λ κΉμ§ μΌλ ¨μ κ³Όμ μ λ§νλ€. μλͺ μ£ΌκΈ° μμμλ νΉμ μμ μ
velog.io
https://ko.reactjs.org/docs/state-and-lifecycle.html
State and Lifecycle – React
A JavaScript library for building user interfaces
ko.reactjs.org
[React] μ»΄ν¬λνΈ μλͺ μ£ΌκΈ° λ©μλ
리μ‘νΈ μ»΄ν¬λνΈμλ λΌμ΄νμ¬μ΄ν΄(μλͺ μ£ΌκΈ°)μ΄ μ‘΄μ¬νλ€.μ»΄ν¬λνΈμ μλͺ μ νμ΄μ§μ λ λλ§λκΈ° μ μΈ μ€λΉκ³Όμ μμ μμνμ¬ νμ΄μ§μμ μ¬λΌμ§ λλλλ€.μ»΄ν¬λνΈλ₯Ό μ²μμΌλ‘ λ λλ§ ν
velog.io