![[React] ์๋ช
์ฃผ๊ธฐ](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZNxZl%2FbtsJ4NIxAYv%2FIsqLGKYt3TVUTTtOF8xQhk%2Fimg.png)
- ๐ ์ปดํฌ๋ํธ์ ์๋ช ์ฃผ๊ธฐ๋ ๋ฌด์์ธ๊ฐ์?
- ๐ฅ๏ธ ์ปดํฌ๋ํธ์ ์๋ช ์ฃผ๊ธฐ ๋จ๊ณ
- 1. ์ปดํฌ๋ํธ์ ์์ฑ ๋จ๊ณ (Mounting)
- 2. ์ปดํฌ๋ํธ์ ์ ๋ฐ์ดํธ ๋จ๊ณ (Updating)
- 3. ์ปดํฌ๋ํธ์ ์ ๊ฑฐ ๋จ๊ณ (Unmounting)
- ๐ค ํด๋์คํ ์ปดํฌ๋ํธ์ ํจ์ํ ์ปดํฌ๋ํธ์ ์๋ช ์ฃผ๊ธฐ ์ฐจ์ด์
- 1. ํด๋์คํ ์ปดํฌ๋ํธ์ ์๋ช ์ฃผ๊ธฐ
- 2. ํจ์ํ ์ปดํฌ๋ํธ์ ์๋ช ์ฃผ๊ธฐ
- 3. ํด๋์คํ ์ปดํฌ๋ํธ์ ํจ์ํ ์ปดํฌ๋ํธ์ ์๋ช ์ฃผ๊ธฐ์ฐจ์ด์
- 4. ํจ์ํ ์ปดํฌ๋ํธ๋ก์ ์ ํ ์ถ์ธ
- ๐จ ์ฃผ์ํ ์
- ๐ ๊ฒฐ๋ก
- ๐ ์ถ๊ฐ ์ ๋ณด
๐ ์ปดํฌ๋ํธ์ ์๋ช ์ฃผ๊ธฐ๋ ๋ฌด์์ธ๊ฐ์?
๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ ํ์์์๋ถํฐ ์๋ฉธ๊น์ง ์๋ช ์ฃผ๊ธฐ(lifecycle)๋ฅผ ๊ฐ์ง๊ณ ์์ด์. ์ด๋ฅผ ์ปดํฌ๋ํธ ์๋ช ์ฃผ๊ธฐ๋ผ๊ณ ๋ถ๋ฌ์. ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ ์ปดํฌ๋ํธ๊ฐ ์ด๋ป๊ฒ ์์ฑ๋๊ณ , ์ ๋ฐ์ดํธ๋๋ฉฐ, ์ ๊ฑฐ๋๋์ง๋ฅผ ์ ์ํด์ฃผ๋ ๋ฉ์๋๋ค์ด์์. ๋ฆฌ์กํธ์์๋ ํด๋์คํ ์ปดํฌ๋ํธ์์ ์ฃผ๋ก ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉฐ, ํจ์ํ ์ปดํฌ๋ํธ์์๋ ์ฃผ๋ก ํ (Hooks)์ ์ฌ์ฉํด ๋์ผํ ๋์์ ๊ตฌํํ ์ ์์ด์.
๋น์ ๋ฅผ ๋ค์๋ฉด, ์ปดํฌ๋ํธ์ ์๋ช ์ฃผ๊ธฐ๋ ์ฌ๋์ด ํ์ด๋๊ณ ์๋ผ๊ณ ๊ฒฐ๊ตญ ์์ ๋ง์น๋ ๊ณผ์ ๊ณผ ๋น์ทํด์. ์ปดํฌ๋ํธ๋ ์์ฑ๋๊ณ , ์ฌ์ฉ์ ์ํธ์์ฉ์ด๋ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ๋ฐ๋ผ ์ ๋ฐ์ดํธ๋๋ฉฐ, ๋ ์ด์ ํ์ํ์ง ์์ผ๋ฉด ์๋ฉธ๋์ฃ . ์ด ๋ชจ๋ ๊ณผ์ ์์ ํน์ ์์ ๋ง๋ค ์คํ๋๋ ๋ฉ์๋๋ ๋์์ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ผ๊ณ ํด์.
๐ฅ๏ธ ์ปดํฌ๋ํธ์ ์๋ช ์ฃผ๊ธฐ ๋จ๊ณ
๋ฆฌ์กํธ ์ปดํฌ๋ํธ์ ์๋ช ์ฃผ๊ธฐ๋ ํฌ๊ฒ ์ธ ๊ฐ์ง ๋จ๊ณ๋ก ๋๋ ์ ์์ด์: ์์ฑ(mounting), ์ ๋ฐ์ดํธ(updating), ์ ๊ฑฐ(unmounting). ๊ฐ๊ฐ์ ๋จ๊ณ์์ ํธ์ถ๋๋ ๋ฉ์๋๋ค์ ์ดํด๋ณผ๊ฒ์.
1. ์ปดํฌ๋ํธ์ ์์ฑ ๋จ๊ณ (Mounting)
์์ฑ ๋จ๊ณ๋ ์ปดํฌ๋ํธ๊ฐ ์ฒ์์ผ๋ก DOM์ ์ถ๊ฐ๋ ๋ ๋ฐ์ํด์. ์ด ๋จ๊ณ์์ ์ฌ์ฉ๋๋ ์ฃผ์ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ ๋ค์๊ณผ ๊ฐ์์:
- constructor(): ์ปดํฌ๋ํธ๊ฐ ์์ฑ๋ ๋ ํธ์ถ๋๋ ๋ฉ์๋๋ก, ์ด๊ธฐ state๋ฅผ ์ค์ ํ๊ฑฐ๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ๋ฐ์ธ๋ฉํ๋ ๋ฐ ์ฌ์ฉ๋ผ์.
- componentDidMount(): ์ปดํฌ๋ํธ๊ฐ ์ฒ์ ๋ ๋๋ง๋ ์งํ์ ํธ์ถ๋ผ์. ์ด ๋ฉ์๋๋ API ์์ฒญ์ด๋ DOM ์กฐ์ ๋ฑ์ ์์ ์ ์ํํ ๋ ์ฃผ๋ก ์ฌ์ฉ๋ผ์.
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.state = { count: 0 };
console.log("constructor: ์ปดํฌ๋ํธ ์์ฑ");
}
componentDidMount() {
console.log("componentDidMount: ์ปดํฌ๋ํธ๊ฐ DOM์ ์ถ๊ฐ๋จ");
}
render() {
return <h1>์นด์ดํธ: {this.state.count}</h1>;
}
}
constructor ๋ฉ์๋๋ ์ปดํฌ๋ํธ๊ฐ ์์ฑ๋ ๋ ํธ์ถ๋ผ์.
componentDidMount๋ ์ปดํฌ๋ํธ๊ฐ ์ฒ์ DOM์ ์ถ๊ฐ๋ ํ ํธ์ถ๋์ด, ๋ณดํต ๋น๋๊ธฐ ์์ฒญ์ด๋ ํ์ด๋จธ ์ค์ ๋ฑ์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋ผ์.
2. ์ปดํฌ๋ํธ์ ์ ๋ฐ์ดํธ ๋จ๊ณ (Updating)
์ ๋ฐ์ดํธ ๋จ๊ณ๋ ์ปดํฌ๋ํธ๊ฐ ์ํ(state)๋ ์์ฑ(props)์ ๋ณํ๋ก ์ธํด ๋ค์ ๋ ๋๋ง๋ ๋ ๋ฐ์ํด์. ์ด ๋จ๊ณ์์ ์ฃผ๋ก ์ฌ์ฉ๋๋ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋:
- shouldComponentUpdate(): ์ปดํฌ๋ํธ๊ฐ ๋ค์ ๋ ๋๋ง๋ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ๋ฉ์๋์์. ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํด, ๋ณ๊ฒฝ๋ ๋ด์ฉ์ด ์์ผ๋ฉด ์ปดํฌ๋ํธ๋ฅผ ๋ค์ ๋ ๋๋งํ์ง ์๊ฒ ํ ์ ์์ด์.
- componentDidUpdate(): ์ปดํฌ๋ํธ๊ฐ ์ ๋ฐ์ดํธ๋ ํ ํธ์ถ๋ผ์. ์ ๋ฐ์ดํธ๋ ํ์ ์ถ๊ฐ ์์ ์ ํ๊ฑฐ๋, ๋ณ๊ฒฝ๋ ๋ด์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ๋์์ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉ๋ผ์.
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.state = { count: 0 };
}
shouldComponentUpdate(nextProps, nextState) {
// ์นด์ดํธ๊ฐ 5 ์ด์์ด๋ฉด ์
๋ฐ์ดํธํ์ง ์์
return nextState.count < 5;
}
componentDidUpdate(prevProps, prevState) {
console.log("componentDidUpdate: ์ปดํฌ๋ํธ๊ฐ ์
๋ฐ์ดํธ๋จ");
}
render() {
return (
<div>
<h1>์นด์ดํธ: {this.state.count}</h1>
<button onClick={() => this.setState({ count: this.state.count + 1 })}>
์ฆ๊ฐ
</button>
</div>
);
}
}
shouldComponentUpdate๋ ์ปดํฌ๋ํธ๊ฐ ๋ค์ ๋ ๋๋ง๋์ด์ผ ํ๋์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํด์.
์ฌ๊ธฐ์๋ ์นด์ดํธ๊ฐ 5 ์ด์์ด๋ฉด ์ ๋ฐ์ดํธ๋ฅผ ๋ฐฉ์งํ๊ณ ์์ด์. componentDidUpdate๋ ์ปดํฌ๋ํธ๊ฐ ์ ๋ฐ์ดํธ๋ ํ ์ถ๊ฐ ์์ ์ ์ํํ ๋ ์ฌ์ฉ๋ผ์.
3. ์ปดํฌ๋ํธ์ ์ ๊ฑฐ ๋จ๊ณ (Unmounting)
์ ๊ฑฐ ๋จ๊ณ๋ ์ปดํฌ๋ํธ๊ฐ DOM์์ ์ ๊ฑฐ๋ ๋ ๋ฐ์ํด์. ์ด ๋จ๊ณ์์๋ componentWillUnmount()
๋ฉ์๋๋ฅผ ์ฌ์ฉํด์. ์ฃผ๋ก ๋ฆฌ์์ค ์ ๋ฆฌ ์์
์ ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
- componentWillUnmount(): ์ปดํฌ๋ํธ๊ฐ DOM์์ ์ ๊ฑฐ๋๊ธฐ ์ ์ ํธ์ถ๋ผ์. ํ์ด๋จธ๋ ๊ตฌ๋ (subscription)์ ํด์ ํ๊ฑฐ๋, ๋ฆฌ์์ค๋ฅผ ์ ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋ผ์.
class MyComponent extends React.Component {
componentWillUnmount() {
console.log("componentWillUnmount: ์ปดํฌ๋ํธ๊ฐ DOM์์ ์ ๊ฑฐ๋จ");
}
render() {
return <h1>์๋
ํ์ธ์!</h1>;
}
}
componentWillUnmount๋ ์ปดํฌ๋ํธ๊ฐ DOM์์ ์ ๊ฑฐ๋๊ธฐ ์ ์ ํธ์ถ๋ผ์.
์ฃผ๋ก ํ์ด๋จธ ์ ๊ฑฐ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ํด์ ๋ฑ์ ์ ๋ฆฌ ์์ ์ ํ ๋ ์ฌ์ฉ๋ผ์.
๐ค ํด๋์คํ ์ปดํฌ๋ํธ์ ํจ์ํ ์ปดํฌ๋ํธ์ ์๋ช ์ฃผ๊ธฐ ์ฐจ์ด์
๋ฆฌ์กํธ์์๋ ํด๋์คํ ์ปดํฌ๋ํธ์ ํจ์ํ ์ปดํฌ๋ํธ๋ผ๋ ๋ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ์ปดํฌ๋ํธ๋ฅผ ์ ์ํ ์ ์์ด์. ๋ ๋ฐฉ์ ๋ชจ๋ ๋ฆฌ์กํธ์ ์ปดํฌ๋ํธ๋ฅผ ์ ์ํ๋ ๋ฐ ์ฌ์ฉ๋์ง๋ง, ์๋ช ์ฃผ๊ธฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ์ฐจ์ด๊ฐ ์์ด์.
1. ํด๋์คํ ์ปดํฌ๋ํธ์ ์๋ช ์ฃผ๊ธฐ
ํด๋์คํ ์ปดํฌ๋ํธ๋ ๋ฆฌ์กํธ ์ด์ฐฝ๊ธฐ๋ถํฐ ์ฌ์ฉ๋ ์ ํต์ ์ธ ์ปดํฌ๋ํธ ๋ฐฉ์์ด์์. ์ด ์ปดํฌ๋ํธ๋ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ํตํด ์ปดํฌ๋ํธ์ ์์ฑ, ์ ๋ฐ์ดํธ, ์ ๊ฑฐ ๋จ๊ณ์์ ํน์ ์์ ์ ์ํํ ์ ์์ด์. ์ฃผ์ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ ๋ค์๊ณผ ๊ฐ์์:
- constructor(): ์ปดํฌ๋ํธ๊ฐ ์์ฑ๋ ๋ ํธ์ถ๋ผ์. ์ด๊ธฐ state ์ค์ ์ด๋ props๋ฅผ ๋ฐ์ธ๋ฉํ ๋ ์ฌ์ฉ๋ผ์.
- componentDidMount(): ์ปดํฌ๋ํธ๊ฐ ์ฒ์ ๋ ๋๋ง๋ ์งํ์ ํธ์ถ๋ผ์.
- shouldComponentUpdate(): ์ปดํฌ๋ํธ๊ฐ ์ ๋ฐ์ดํธ๋ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํด์.
- componentDidUpdate(): ์ปดํฌ๋ํธ๊ฐ ์ ๋ฐ์ดํธ๋ ํ ํธ์ถ๋ผ์.
- componentWillUnmount(): ์ปดํฌ๋ํธ๊ฐ DOM์์ ์ ๊ฑฐ๋๊ธฐ ์ง์ ์ ํธ์ถ๋ผ์.
ํด๋์คํ ์ปดํฌ๋ํธ๋ ์ด์ฒ๋ผ ๋ช ํํ๊ฒ ๊ตฌ๋ถ๋ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ํตํด ์ปดํฌ๋ํธ์ ๊ฐ ๋จ๊ณ์์ ์์ ์ ์ฒ๋ฆฌํ ์ ์์ด์.
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.state = { count: 0 };
console.log("constructor: ์ปดํฌ๋ํธ ์์ฑ");
}
componentDidMount() {
console.log("componentDidMount: ์ปดํฌ๋ํธ๊ฐ DOM์ ์ถ๊ฐ๋จ");
}
shouldComponentUpdate(nextProps, nextState) {
return nextState.count < 5;
}
componentDidUpdate(prevProps, prevState) {
console.log("componentDidUpdate: ์ปดํฌ๋ํธ๊ฐ ์
๋ฐ์ดํธ๋จ");
}
componentWillUnmount() {
console.log("componentWillUnmount: ์ปดํฌ๋ํธ๊ฐ DOM์์ ์ ๊ฑฐ๋จ");
}
render() {
return (
<div>
<h1>์นด์ดํธ: {this.state.count}</h1>
<button onClick={() => this.setState({ count: this.state.count + 1 })}>
์ฆ๊ฐ
</button>
</div>
);
}
}
์ด ์ฝ๋๋ ์ปดํฌ๋ํธ์ ์์ฑ, ์ ๋ฐ์ดํธ, ์ ๊ฑฐ ๋จ๊ณ์์ ํธ์ถ๋๋ ์ฃผ์ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ๋ณด์ฌ์ค์.
๊ฐ ๋ฉ์๋๋ ์ปดํฌ๋ํธ์ ํน์ ์์ ์์ ์์ ์ ์ํํ ์ ์์ด์.
2. ํจ์ํ ์ปดํฌ๋ํธ์ ์๋ช ์ฃผ๊ธฐ
ํจ์ํ ์ปดํฌ๋ํธ๋ ๋ฆฌ์กํธ 16.8 ์ดํ๋ก ๋์ ๋ Hooks๋ฅผ ํตํด ์๋ช ์ฃผ๊ธฐ๋ฅผ ์ฒ๋ฆฌํด์. ์ด๊ธฐ์๋ ํจ์ํ ์ปดํฌ๋ํธ๊ฐ ๋จ์ํ UI๋ง ๋ฐํํ๋ ์ญํ ์ ํ์ง๋ง, Hooks๊ฐ ๋์ ๋๋ฉด์ ํจ์ํ ์ปดํฌ๋ํธ์์๋ ์ํ ๊ด๋ฆฌ์ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋ ๊ฐ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๊ฒ ๋์์ด์.
- useState: ํจ์ํ ์ปดํฌ๋ํธ์์ state๋ฅผ ๊ด๋ฆฌํ๋ ํ ์ด์์.
- useEffect: ์ปดํฌ๋ํธ์ ์์ฑ, ์ ๋ฐ์ดํธ, ์ ๊ฑฐ ์ ํน์ ์์ ์ ์ฒ๋ฆฌํ๋ ํ ์ผ๋ก, ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋์ ์ญํ ์ ๋์ ํด์.
import React, { useState, useEffect } from "react";
const MyComponent = () => {
const [count, setCount] = useState(0);
useEffect(() => {
console.log("์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋์์ด์!");
return () => {
console.log("์ปดํฌ๋ํธ๊ฐ ์ธ๋ง์ดํธ๋ ๋ ํธ์ถ๋ฉ๋๋ค.");
};
}, []);
useEffect(() => {
console.log("์นด์ดํธ๊ฐ ์
๋ฐ์ดํธ๋์์ด์: ", count);
}, [count]);
return (
<div>
<h1>์นด์ดํธ: {count}</h1>
<button onClick={() => setCount(count + 1)}>์ฆ๊ฐ</button>
</div>
);
};
useEffect ํ ์ ํจ์ํ ์ปดํฌ๋ํธ์์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋ผ์.
์ฒซ ๋ฒ์งธ useEffect๋ ์ปดํฌ๋ํธ๊ฐ ์์ฑ๋ ๋์ ์ ๊ฑฐ๋ ๋ ๋์ํ๊ณ , ๋ ๋ฒ์งธ useEffect๋ ์นด์ดํธ๊ฐ ์ ๋ฐ์ดํธ๋ ๋ ๋์ํด์.
3. ํด๋์คํ ์ปดํฌ๋ํธ์ ํจ์ํ ์ปดํฌ๋ํธ์ ์๋ช ์ฃผ๊ธฐ์ฐจ์ด์
ํด๋์คํ ์ปดํฌ๋ํธ์ ํจ์ํ ์ปดํฌ๋ํธ๋ ์๋ช ์ฃผ๊ธฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์์ ์ฐจ์ด๊ฐ ์์ด์.
๊ตฌ๋ถ | ํด๋์คํ ์ปดํฌ๋ํธ | ํจ์ํ ์ปดํฌ๋ํธ |
์๋ช ์ฃผ๊ธฐ ์ฒ๋ฆฌ | ๋ช ์์ ์ธ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ์ฌ์ฉ | useEffect์ ๊ฐ์ ํ ์ ์ฌ์ฉํ์ฌ ์๋ช ์ฃผ๊ธฐ๋ฅผ ์ฒ๋ฆฌ |
์ํ ๊ด๋ฆฌ | this.state์ setState๋ฅผ ์ฌ์ฉ | useState ํ ์ ์ฌ์ฉํ์ฌ ์ํ๋ฅผ ๊ด๋ฆฌ |
๊ฐ๋ ์ฑ | ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๊ฐ ์ฌ๋ฌ ๋จ๊ณ๋ก ๋๋์ด ๋ณต์กํ ์ ์์ | ํ ๋ฒ์ ํ ํธ์ถ๋ก ์ปดํฌ๋ํธ์ ๋ชจ๋ ๋จ๊ณ ์ฒ๋ฆฌ ๊ฐ๋ฅ |
์ฑ๋ฅ | ๋ฆฌ์กํธ๊ฐ ํจ์ํ ์ปดํฌ๋ํธ๋ฅผ ๋ ์ต์ ํํ์ฌ ์ฑ๋ฅ์ ์ผ๋ก ์ ๋ฆฌํจ | ํจ์ํ ์ปดํฌ๋ํธ๊ฐ ๋ ๊ฐ๋ฒผ์ด ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ธ ์ฑ๋ฅ์ด ๋ ์ข์ |
4. ํจ์ํ ์ปดํฌ๋ํธ๋ก์ ์ ํ ์ถ์ธ
๋ฆฌ์กํธ์ ์ต์ ๋ฒ์ ์์๋ ํจ์ํ ์ปดํฌ๋ํธ๊ฐ ํด๋์คํ ์ปดํฌ๋ํธ๋ณด๋ค ๋ ๋ง์ด ์ฌ์ฉ๋ผ์. ๊ทธ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์์:
- ๊ฐ๊ฒฐํ ์ฝ๋: ํจ์ํ ์ปดํฌ๋ํธ๋ ๋ ๊ฐ๊ฒฐํ๊ณ , ์๋ช
์ฃผ๊ธฐ ์ฒ๋ฆฌ๋ ํ๋์
useEffect
๋ก ํตํฉ๋์ด ๋ ์ง๊ด์ ์ด์์. - ์ฑ๋ฅ ์ต์ ํ: ๋ฆฌ์กํธ๋ ํจ์ํ ์ปดํฌ๋ํธ๋ฅผ ๋ ์ต์ ํํ์ฌ ๋ ๋๋ง ์ฑ๋ฅ์ด ๋ ๋ฐ์ด๋์.
- Hooks์ ์ ์ฐ์ฑ: Hooks๋ฅผ ํตํด ์ํ ๊ด๋ฆฌ, ์ฌ์ด๋ ์ดํํธ ์ฒ๋ฆฌ, ์ปจํ ์คํธ ์ฌ์ฉ ๋ฑ์ ๋ชจ๋ ๊ฐ๊ฒฐํ๊ฒ ์ฒ๋ฆฌํ ์ ์์ด์.
๐จ ์ฃผ์ํ ์
์ปดํฌ๋ํธ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๋ค๋ฃฐ ๋ ์ฃผ์ํด์ผ ํ ๋ช ๊ฐ์ง ์ฌํญ์ด ์์ด์.
- ๋ถํ์ํ ์
๋ฐ์ดํธ ๋ฐฉ์ง: ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํด
shouldComponentUpdate
๋ฉ์๋ ๋๋React.memo
๋ฅผ ์ฌ์ฉํ์ฌ ๋ถํ์ํ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐฉ์งํ ์ ์์ด์. ๋ถํ์ํ ๋ ๋๋ง์ ์ฑ๋ฅ์ ์ ํ์ํฌ ์ ์์ผ๋ ์ฃผ์ํด์ผ ํด์. - ์ ๋ฆฌ ์์
ํ์:
componentWillUnmount
๋๋useEffect
์ ํด๋ฆฐ์ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํ์ด๋จธ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ๊ผญ ํด์ ํด์ผ ํด์. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ ์ ์์ด์. - ํจ์ํ ์ปดํฌ๋ํธ์์์ ์ํ ๊ด๋ฆฌ: ํจ์ํ ์ปดํฌ๋ํธ์์๋
useEffect
ํ ์ ํตํด ํด๋์คํ ์ปดํฌ๋ํธ์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๋์ฒดํ ์ ์์ด์. ํ์ง๋ง, ๊ฐ ์๋ช ์ฃผ๊ธฐ์ ๋์ํ๋ ํ ์ ํธ์ถ ์์ ๊ณผ ๋์์ ๋ช ํํ๊ฒ ์ดํดํด์ผ ํด์. - ํจ์ํ ์ปดํฌ๋ํธ ๊ถ์ฅ: ๋ฆฌ์กํธ ๊ณต์ ๋ฌธ์์์๋ ์ด์ ํจ์ํ ์ปดํฌ๋ํธ์ Hooks๋ฅผ ๊ถ์ฅํ๊ณ ์์ด์. ํด๋์คํ ์ปดํฌ๋ํธ๋ ๊ธฐ์กด ์ฝ๋์์ ๋ง์ด ์ฌ์ฉ๋์์ง๋ง, ์ต์ ํ๋ก์ ํธ์์๋ ํจ์ํ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ข์ต๋๋ค.
- ์ปดํฌ๋ํธ์ ํผ์ฉ: ํ๋ก์ ํธ์์๋ ์ฌ์ ํ ํด๋์คํ ์ปดํฌ๋ํธ์ ํจ์ํ ์ปดํฌ๋ํธ๋ฅผ ํผ์ฉํ์ฌ ์ฌ์ฉํ ์ ์์ด์. ํ์ง๋ง ๊ฐ๋ฅํ ๊ฒฝ์ฐ, ํจ์ํ ์ปดํฌ๋ํธ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
useEffect
์ ์์กด์ฑ ๋ฐฐ์ด: ํจ์ํ ์ปดํฌ๋ํธ์์useEffect
๋ฅผ ์ฌ์ฉํ ๋, ์์กด์ฑ ๋ฐฐ์ด์ ์ ํํ๊ฒ ์ค์ ํด์ผ ํด์. ์์กด์ฑ ๋ฐฐ์ด์ด ์๊ฑฐ๋, ์๋ชป ์ค์ ๋๋ฉด ๋ฌดํ ๋ฃจํ๊ฐ ๋ฐ์ํ ์ ์์ด์.
๐ ๊ฒฐ๋ก
๋ฆฌ์กํธ ์ปดํฌ๋ํธ์ ์๋ช ์ฃผ๊ธฐ๋ ์ปดํฌ๋ํธ์ ์์ฑ, ์ ๋ฐ์ดํธ, ์ ๊ฑฐ ์์ ์ ๋ฐ๋ผ ํธ์ถ๋๋ ์ผ๋ จ์ ๋ฉ์๋๋ค์ด์์. ์ด ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ์ ์ ํ ํ์ฉํ๋ฉด ์ปดํฌ๋ํธ์ ์ฑ๋ฅ์ ์ต์ ํํ๊ณ , ํ์ํ ์์ ์ ์ ์ ํ ์์ ์ ์ฒ๋ฆฌํ ์ ์์ด์. ํจ์ํ ์ปดํฌ๋ํธ์์๋ Hooks๋ฅผ ์ฌ์ฉํด ๋น์ทํ ๋์์ ๊ตฌํํ ์ ์์ด์.
์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ ๋น๋๊ธฐ ์์ , ๋ฐ์ดํฐ ์์ฒญ, ๋ฆฌ์์ค ์ ๋ฆฌ ๋ฑ ์ฌ๋ฌ ์ํฉ์์ ๋งค์ฐ ์ ์ฉํ๋ฉฐ, ์ด๋ฅผ ์ ์ดํดํ๊ณ ํ์ฉํ๋ฉด ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์ฑ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ ํด๋์คํ ์ปดํฌ๋ํธ์ ํจ์ํ ์ปดํฌ๋ํธ๋ก ๋๋๋ฉฐ, ๊ฐ ๋ฐฉ์์ ๋ฐ๋ผ ๋ผ์ดํ์ฌ์ดํด์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ด ๋ค๋ฆ
๋๋ค. ํด๋์คํ ์ปดํฌ๋ํธ๋ ๋ช
ํํ ๋ผ์ดํ์ฌ์ดํด ๋ฉ์๋๋ฅผ ์ ๊ณตํ์ง๋ง, ํจ์ํ ์ปดํฌ๋ํธ๋ Hooks๋ฅผ ํตํด ๋ ๊ฐ๊ฒฐํ๊ณ ์ง๊ด์ ์ผ๋ก ์ํ ๊ด๋ฆฌ์ ๋ผ์ดํ์ฌ์ดํด ์ฒ๋ฆฌ๋ฅผ ํ ์ ์์ด์.
์ต๊ทผ ๋ฆฌ์กํธ๋ ํจ์ํ ์ปดํฌ๋ํธ์ Hooks๋ฅผ ์ค์ฌ์ผ๋ก ๋ฐ์ ํ๊ณ ์์ผ๋ฉฐ, ์ฑ๋ฅ ์ต์ ํ์ ๊ฐ๊ฒฐํ ์ฝ๋ ์์ฑ์ด๋ผ๋ ์ฅ์ ๋๋ถ์ ๋ ๋ง์ด ์ฌ์ฉ๋๊ณ ์์ด์. ๊ธฐ์กด ์ฝ๋์์ ํด๋์คํ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋๋ผ๋, ์ ์ฐจ ํจ์ํ ์ปดํฌ๋ํธ๋ก ์ ํํ๋ ๊ฒ์ด ์ถ์ฒ๋ฉ๋๋ค.
๐ ์ถ๊ฐ ์ ๋ณด
- ๋ฆฌ์กํธ ์ปดํฌ๋ํธ์ ์๋ช ์ฃผ๊ธฐ์ ๋ํ ๋ ๊น์ ์ดํด๋ฅผ ์ํ์ ๋ค๋ฉด, ๋ฆฌ์กํธ ๊ณต์ ๋ฌธ์์์ ์์ธํ ์ ๋ณด๋ฅผ ์ฐพ์๋ณผ ์ ์์ด์.
- useEffect์ ๋ํ ํฌ์คํ ์ ์ฌ๊ธฐ์ ํ์ธํ ์ ์์ด์.
'Front-end > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] JSX (0) | 2024.10.19 |
---|---|
[React] useEffect (0) | 2024.04.04 |
[React] useRef (0) | 2024.01.31 |
[React] State (1) | 2024.01.08 |
ํฌ์คํ ์ด ์ข์๋ค๋ฉด "์ข์์โค๏ธ" ๋๋ "๊ตฌ๋ ๐๐ป" ํด์ฃผ์ธ์!