
์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ ์ปดํฌ๋ํธ๊ฐ ํน์ ์ํ์ ๋๋ฌํ์ ๋ ์๋์ผ๋ก ํธ์ถ๋๋ค.
ex) ์ปดํฌ๋ํธ ์์ฑ, ์ ๋ฐ์ดํธ, ์ ๊ฑฐ ๋ฑ๋ฑ...
React์ ์ฃผ์ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
1. componentDidMount()
- ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ฆฐ ๋ ์งํ์ ํธ์ถ๋๋ ๋ฉ์๋์ด๋ค.
- ์ฃผ๋ก ์ด๊ธฐ ๋ฐ์ดํฐ ๋ก๋ฉ, ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๊ธฐํ ๋ฑ์ ์ฌ์ฉ๋๋ค.
import React, { Component } from 'react';
class MyComponent extends Component {
constructor(props) {
super(props);
}
componentDidMount() {
// ์ด๊ธฐ ๋ฐ์ดํฐ ๋ก๋ฉ
}
render() {
return (<h1>MyComponent</h1>);
}
}
export default MyComponent;
2. shouldComponentUpdate(nextProps, nextState)
- ์ปดํฌ๋ํธ๊ฐ ์ ๋ฐ์ดํธ ๋๊ธฐ ์ ์ ํธ์ถ๋๋ ๋ฉ์๋์ด๋ค.
- ๋ฆฌ๋ ๋๋ง(re-rendering) ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ค.
- true ๋ฐํ : ๋ฆฌ๋ ๋๋ง ์คํ
- false ๋ฐํ : ๋ฆฌ๋ ๋๋ง ์คํ X
- state๊ฐ ๋ณ๊ฒฝ๋จ์ ๋ฐ๋ผ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋๋๋ฐ, ํน์ ์กฐ๊ฑด์ ์ผ์นํ ๋๋ง ๋ ๋๋ง ๋๋๋ก ์ ์ด ํ ์ ์๋ค.
import React, { Component } from 'react';
class MyComponent extends Component {
constructor(props) {
super(props);
}
shouldComponentUpdate(nextProps, nextState) {
if (this.props.someValue !== nextProps.someValue) {
return true; // ๋ฆฌ๋ ๋๋ง ์คํ
}
if (nextState.count % 2 === 0 ) {
return true; // ๋ฆฌ๋ ๋๋ง ์คํ
}
return false; // ๋ฆฌ๋ ๋๋ง ์คํ X
}
render() {
return (<h1>MyComponent</h1>);
}
}
export default MyComponent;
3. componentDidUpdate(prevProps, prevState)
- ์ปดํฌ๋ํธ๊ฐ ์ ๋ฐ์ดํธ ๋ ํ์ ํธ์ถ๋๋ ๋ฉ์๋์ด๋ค.
- ์ด์ ์์ฑ(prevProps)๊ณผ ์ด์ ์ํ(prevState)์ ์ ๊ทผํ ์ ์๋ค.
import React, { Component } from 'react';
class MyComponent extends Component {
constructor(props) {
super(props);
}
componentDidUpdate(prevProps) {
// ์ด์ ์์ฑ๊ณผ ํ์ฌ ์์ฑ ๋น๊ต๋ฅผ ํตํด ์ถ๊ฐ ๋์ ์คํ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ๊ฐ๋ฅ
if (prevProsp.someValue !== this.props.someValue) {
// ์ถ๊ฐ ๋์ ์คํ
}
}
render() {
return (<h1>MyComponent</h1>);
}
}
export default MyComponent;
4.componentWillUnmount()
- ์ปดํฌ๋ํธ๊ฐ ์ ๊ฑฐ๋๊ธฐ ์ ์ ํธ์ถ๋๋ ๋ฉ์๋์ด๋ค.
- ์ฃผ๋ก ๋ฆฌ์์ค ํด์ , ์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ ๊ฑฐ ๋ฑ์ ์ ๋ฆฌ ์์ ์ ์ํํ ๋ ์ฌ์ฉ๋๋ค.
import React, { Component } from 'react';
class MyComponent extends Component {
constructor(props) {
super(props);
}
componentDidMount() {
window.addEventListener('resize', this.handleResize); // ์ปดํฌ๋ํธ ๋ง์ดํธ๋ ํ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๋ฑ๋ก
}
componentWillUnmount() {
window.removeEventListener('resize', this.handleResize); // ์ปดํฌ๋ํธ ์ ๊ฑฐ ์ ์ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ ๊ฑฐ
}
handleResize() {
console.log('Window resized!'); // ์ฐฝ ํฌ๊ธฐ๊ฐ ๋ณ๊ฒฝ๋ ๋ ํธ์ถ๋๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ
}
render() {
return (<h1>MyComponent</h1>);
}
}
export default MyComponent;
๋ฐ์ํ
'Frontend > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
React | ๋ ๋๋ง ์ฃผ๊ธฐ - ์์ฑ ๋จ๊ณ (Mounting) (1) | 2023.11.30 |
---|---|
React | ๋ ๋๋ง ์ฃผ๊ธฐ (2) | 2023.11.29 |
React | ๊ฐ์ฒด ํ์ State ์ ๋ฐ์ดํธ (0) | 2023.11.27 |
React | ๋ฐฐ์ด ํ์ State ์ ๋ฐ์ดํธ (1) | 2023.11.24 |
React | ๋ณ์ vs State (2) | 2023.11.23 |