1. useLayoutEffect
2. ์ปดํฌ๋ํธ ์ด๋ฒคํธ ํธ๋ค๋ง
1. useLayoutEffect ์ด๋ โญ๏ธ
- ๋ฆฌ์กํธ ํ ํจ์๋ฅผ ๋ฐํ์ผ๋ก ํ ์๋ช ์ฃผ๊ธฐ๋ ๋ค์๊ณผ ๊ฐ์
- ๋ธ๋ผ์ฐ์ ๊ฐ ๋ ๋๋ง๋ ๋ .jsํ์ผ์ ๋ธ๋ผ์ฐ์ ์์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ผ๋ก ๊ถํ์ ๋๊ฒจ .js ํด๋น ํ์ผ์ ํ์ฑํ๊ณ ๊ทธ๋ฆฌ๊ฒ ๋จ
- ์ ๊ทธ๋ฆผ์ ํ ๋ผ์ดํ ์ฌ์ดํด์ ๋ณด๋ค์ํผ ๋ธ๋ผ์ฐ์ ๊ฐ ์คํฌ๋ฆฐ์ ํ์ธํ ์์ ์ด ์๋ฃ๋ ์ดํ useEffect๋ฅผ ์คํํ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ก์
- ๋ฐ๋ผ์ ์๋ ์ฝ๋์ ๊ฐ์ด ๋ ๋๋งํ ๋ useState(0)๊ณผ ๊ฐ์ ์ด๊ธฐ useState์ ๊ฐ์ด ๋น ๊ฐ์ด๋ผ๋ฉด, 0์ ์ถ๋ ฅํ๋ค๊ฐ useEffect๋ฅผ ํตํด ์ฑ์์ง๋ ๊ตฌ์กฐ๋ฅผ ๋
// ์ฝ๋ ์ฐธ๊ณ : https://merrily-code.tistory.com/46
import { useEffect, useState } from 'react';
function App() {
const [age, setAge] = useState(0);
const [name, setName] = useState('');
useEffect(() => {
setAge(25);
setName('์ฐฌ๋ฏผ');
}, []);
return (
<>
<div className='App'>{`๊ทธ์ ์ด๋ฆ์ ${name} ์ด๋ฉฐ, ๋์ด๋ ${age}์ด ์
๋๋ค.`}</div>
</>
);
}
export default App;
- useLayoutEffect๋ ๋ฐ๋ก ์ด๋ฐ ๋ฌธ์ (↑)๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฑ์ฅํ ํ
์
- useLayoutEffect๋ ๋ธ๋ผ์ฐ์ ๊ฐ ํ๋ฉด์ DOM์ ๊ทธ๋ฆฌ๊ธฐ ์ ์ ์ดํํธ๋ฅผ ์ํํจ
๋ฐ๋ผ์ ์์ ์ฝ๋ ์คํ ์์๋ ๋ฌ๋ผ์ง๊ฒ ๋๋ ๊ฒ์
1. ๋ ์ด์์ ์ดํํธ ๋ด๋ถ์ setNumber, setName ํธ์ถ
2. <div>๊ทธ์ ์ด๋ฆ์ ์ฐฌ๋ฏผ์ด๋ฉฐ, ๋์ด๋ 25์ด ์ ๋๋ค.</div>๋ฅผ ํ์ธํธ
// ์ฝ๋ ์ฐธ๊ณ : https://merrily-code.tistory.com/46
import { useLayoutEffect, useState } from 'react';
function App() {
const [age, setAge] = useState(0);
const [name, setName] = useState('');
useLayoutEffect(() => {
setAge(25);
setName('์ฐฌ๋ฏผ');
}, []);
return (
<>
<div className='App'>{`๊ทธ์ ์ด๋ฆ์ ${name} ์ด๋ฉฐ, ๋์ด๋ ${age}์ด ์
๋๋ค.`}</div>
</>
);
}
export default App;
2. ์ปดํฌ๋ํธ์์ ์ด๋ฒคํธ ํธ๋ค๋ง โญ๏ธ
- ์ด๋ฒคํธ๋ก ์ค์ ํ ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ์ด ์๋ ์ง์ ๋ฃ์ด ์ค ๋๋ ํ์ดํ ํจ์ ๋ฌธ๋ฒ์ ์ฌ์ฉํ์ฌ ๋ฃ์ด ์ฃผ์ด์ผ ํจ
case 1: ์๋ํ์ง ์๋ ๋ฌธ๋ฒ
<button onClick={this.setState({ number: number + 1})}> (x)
case 2: ์๋ํ๋ ๋ฌธ๋ฒ
<button onClick={()=> this.setState({ number: number + 1}; )}> (o)
or
case 3: ์์ ํจ์๋ก ๋นผ์ฃผ๊ณ ํด๋น ํจ์๋ฅผ ๋ถ๋ฌ ์ฌ์ฉํ๋ค.
const plusNum = (number) => {
setState(number : number + 1);
}
...
<button onClick={plusNum}>+ 1 </button>
Tips. ๋ฆฌ์กํธ์ ์ฑ๋ฅ ๊ฐ์ ๋ฐฉ๋ฒ
- hook ํจ์ ์ฌ์ฉ(useMemo, useCallback)
- ์ฝ๋ ์คํ๋ฆฌํ (react.lazy(), Next.js ํ๋ ์์ํฌ ์ฌ์ฉ ๋ฑ)
'Frontend ๐ > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] ํ์ด๋๋ ์ด์ (Hydration), Next etc. (1) | 2024.07.12 |
---|---|
[React] SPA, SSR, SEO etc. (2) | 2024.07.05 |
[React] ์ปดํฌ๋ํธ ๋ผ์ดํ ์ฌ์ดํด, Hooks etc. (1) | 2024.07.04 |
[React] FLUX, ๋ฆฌ๋์ค, state ๋ถ๋ณ์ฑ, ๋ฆฌ๋์ ๋ถ๋ณ์ฑ, side effect etc. (0) | 2024.06.30 |
[React] ํจ์ ์ปจํฌ๋ํธ, props, state etc. (0) | 2024.06.27 |