ํฐ์คํ ๋ฆฌ ๋ทฐ
๐ฏ flushSync๋ ๋ฌด์์ธ๊ฐ์?
**flushSync**๋ React์์ ์ํ(state) ์
๋ฐ์ดํธ๋ฅผ ์ฆ์ ๋ฐ์ํ๊ณ ํ๋ฉด์ ๊ฐ์ ๋ก ์
๋ฐ์ดํธํ ์ ์๊ฒ ํด์ฃผ๋ ํจ์์์.
๋ณดํต React๋ ์ํ๊ฐ ๋ฐ๋์ด๋ ๋น๋๊ธฐ์ ์ผ๋ก ์
๋ฐ์ดํธ๋ฅผ ์ฒ๋ฆฌํด์ ์ฑ๋ฅ์ ์ต์ ํํด์.
ํ์ง๋ง ์ด๋ค ๊ฒฝ์ฐ์๋ "์ง๊ธ ๋น์ฅ ํ๋ฉด์ ๋ฐ์๋์ด์ผ ํด!" ๋ผ๋ ์ํฉ์ด ์๊ธฐ์ฃ .
์ด๋ด ๋ **flushSync**๋ฅผ ์ฌ์ฉํ๋ฉด React๊ฐ ์ฆ์ ๋ ๋๋งํ๋๋ก ๋ง๋ค์ด์ค๋๋ค.
๐ ๋น์ ๋ก ์ดํดํ๊ธฐ: ์์์ ์ฃผ๋ฌธ ์ฒ๋ฆฌ
์ฌ๋ฌ๋ถ์ด ์์์ ์์ ์ฃผ๋ฌธ์ ๋ฐ๊ณ ์๋ค๊ณ ์๊ฐํด ๋ด์. ๐
- ๊ธฐ๋ณธ React ์ํ ์
๋ฐ์ดํธ (๋น๋๊ธฐ์ ์ฒ๋ฆฌ)
- ์๋์ด ์ฃผ๋ฌธ์ ํ๋ฉด ์ฃผ๋ฐฉ์ ์ฌ๋ฌ ์ฃผ๋ฌธ์ ๋ชจ์์ ํ ๋ฒ์ ์ฒ๋ฆฌํด์.
- ์ด๋ ๊ฒ ํ๋ฉด ์ฃผ๋ฐฉ์ ํจ์จ์ฑ์ด ์ข์์ง์ง๋ง, ์๋์ ์กฐ๊ธ ๊ธฐ๋ค๋ ค์ผ ํ ์๋ ์์ด์.
- flushSync๋ฅผ ์ฌ์ฉํ ์ํ ์
๋ฐ์ดํธ (์ฆ์ ์ฒ๋ฆฌ)
- VIP ์๋์ด ์์ "์ ์ฃผ๋ฌธ์ ๋ฐ๋ก ๋ง๋ค์ด ์ฃผ์ธ์!" ๋ผ๊ณ ์์ฒญํ๋ ์ํฉ์ด์์.
- ์ด๋ด ๋ ๊ธฐ์กด ์ฃผ๋ฌธ์ ๋ฌด์ํ๊ณ ๋ฐ๋ก ์ฃผ๋ฐฉ์์ VIP ์๋์ ์ฃผ๋ฌธ์ ์ฒ๋ฆฌํ์ฃ .
React์ **flushSync**๋ ์ด๋ฐ ์ฆ์ ์ฒ๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ๋๊ตฌ์์.
์ฆ, ์ํ ์
๋ฐ์ดํธ๋ฅผ ๋ฐ๋ก ์คํํ๊ณ ํ๋ฉด์ ๊ฐ์ ๋ก ์ฆ์ ์
๋ฐ์ดํธํฉ๋๋ค.
๐ ๏ธ flushSync ์ฌ์ฉ๋ฒ
flushSync๋ React์ react-dom ํจํค์ง์ ํฌํจ๋ ํจ์์์.
๊ฐ๋จํ ์์๋ฅผ ํตํด ํจ๊ป ์ดํด๋ณผ๊ฒ์.
1. ๊ธฐ๋ณธ ์์: ์ํ ์ ๋ฐ์ดํธ์ flushSync ๋น๊ต
flushSync ์์ด ์ํ ์ ๋ฐ์ดํธ
import React, { useState } from 'react';
export default function App() {
const [count, setCount] = useState(0);
const handleClick = () => {
setCount(count + 1);
console.log(count); // ์
๋ฐ์ดํธ ์ ๊ฐ์ด ์ถ๋ ฅ๋ฉ๋๋ค (๋น๋๊ธฐ ์ฒ๋ฆฌ ๋๋ฌธ)
};
return (
<div>
<h1>์นด์ดํธ: {count}</h1>
<button onClick={handleClick}>์นด์ดํธ ์ฆ๊ฐ</button>
</div>
);
}
์ค๋ช :
- ๋ฒํผ์ ํด๋ฆญํ๋ฉด setCount๊ฐ ์คํ๋์ง๋ง, ์ํ ์
๋ฐ์ดํธ๋ ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌ๋๊ธฐ ๋๋ฌธ์
๋ฐ๋ก ํ๋ฉด์ด ์ ๋ฐ์ดํธ๋์ง ์๊ณ console.log์๋ ์ด์ ๊ฐ์ด ์ถ๋ ฅ๋ฉ๋๋ค.
flushSync๋ฅผ ์ฌ์ฉํ ์ํ ์ ๋ฐ์ดํธ
import React, { useState } from 'react';
import { flushSync } from 'react-dom';
export default function App() {
const [count, setCount] = useState(0);
const handleClick = () => {
flushSync(() => {
setCount(count + 1);
});
console.log(count); // ์ฆ์ ์
๋ฐ์ดํธ๋ ๊ฐ์ด ์ถ๋ ฅ๋ฉ๋๋ค
};
return (
<div>
<h1>์นด์ดํธ: {count}</h1>
<button onClick={handleClick}>์นด์ดํธ ์ฆ๊ฐ</button>
</div>
);
}
๐ ์ฝ๋ ์ค๋ช
- flushSync ์ฌ์ฉ
- flushSync ์์์ setCount๋ฅผ ์คํํ๋ฉด React๊ฐ ์ฆ์ ์ํ๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ํ๋ฉด์ ๋ฐ์ํด์.
- ์ฆ์ ๋ ๋๋ง ํ์ธ
- console.log๋ฅผ ์คํํ๋ฉด ์ต์ ์ํ ๊ฐ์ด ์ถ๋ ฅ๋ฉ๋๋ค.
- React๊ฐ ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋์ ์ฆ์ ์ํ๋ฅผ ๋ ๋๋งํ๊ธฐ ๋๋ฌธ์ด์์.
๐ ์ธ์ flushSync๋ฅผ ์ฌ์ฉํ๋ฉด ์ข์๊น์?
- ์ํ ์
๋ฐ์ดํธ ์งํ์ DOM์ด ์ฆ์ ์
๋ฐ์ดํธ๋์ด์ผ ํ ๋
- ์: ์ ๋๋ฉ์ด์ ์ด๋ ๋ ์ด์์ ๊ณ์ฐ์ด ์ํ ๋ณํ ์งํ์ ์ฆ์ ์ ์ฉ๋์ด์ผ ํ๋ ๊ฒฝ์ฐ
- ์ฐ์๋ ์ํ ์
๋ฐ์ดํธ๊ฐ ์ ํํ๊ฒ ๋ฐ์๋์ด์ผ ํ ๋
- ์: ํน์ ์์์ ๋ฐ๋ผ ์ํ๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ๋ฐ๋ก ํ์ธํด์ผ ํ ๋
- UI ๋๊ธฐํ๊ฐ ์ค์ํ ์ํฉ
- ์: ํ๋ฉด์ ์ค์ํ ํผ๋๋ฐฑ(์๋ฌ ๋ฉ์์ง, ๋ก๋ฉ ํ์ ๋ฑ)์ ์ฆ์ ๋ณด์ฌ์ค์ผ ํ ๋
โ ๏ธ ์ฃผ์ํ ์
- ์ฑ๋ฅ ์ ํ ๊ฐ๋ฅ์ฑ
- flushSync๋ฅผ ๋๋ฌด ์์ฃผ ์ฌ์ฉํ๋ฉด React์ ๋น๋๊ธฐ ์ต์ ํ๊ฐ ๋ฌด์๋์ด ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์ด์.
- ๊ผญ ํ์ํ ์ํฉ์์๋ง ์ฌ์ฉํด์ผ ํฉ๋๋ค.
- React 18 ์ด์์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ
- flushSync๋ React 18 ๋ฒ์ ๋ถํฐ ์ง์๋๊ธฐ ๋๋ฌธ์ ๋ฒ์ ์ ํ์ธํ์ธ์.
๐ ํ ์ค ์์ฝ
**flushSync**๋ React์์ ์ํ ์ ๋ฐ์ดํธ๋ฅผ ์ฆ์ ์คํํ๊ณ ํ๋ฉด์ ๋ฐ๋ก ๋ฐ์ํ๋๋ก ๊ฐ์ ํ๋ ํจ์์ ๋๋ค.
๐ ๋ง๋ฌด๋ฆฌ
React๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ํ ์
๋ฐ์ดํธ๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌํด์ ์ฑ๋ฅ์ ์ต์ ํํ์ง๋ง,
๋๋ก๋ ์ํ๊ฐ ์ฆ์ ๋ฐ์๋์ด์ผ ํ๋ ์ํฉ์ด ์๊ธฐ์ฃ .
๊ทธ๋ด ๋ **flushSync**๋ฅผ ์ฌ์ฉํ๋ฉด React๊ฐ ๊ฐ์ ๋ก ํ๋ฉด์ ์
๋ฐ์ดํธํ๋๋ก ๋์์ค๋๋ค.
๋ค๋ง ๋๋ฌด ์์ฃผ ์ฌ์ฉํ๋ฉด ์ฑ๋ฅ์ ๋ถ๋ด์ด ๋ ์ ์์ผ๋ ๊ผญ ํ์ํ ์ํฉ์์๋ง ์ฌ์ฉํ๋ ๊ฑธ ์ถ์ฒ๋๋ ค์! ๐
'web > react dom' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
prefetchDNS (1) | 2024.12.16 |
---|---|
preconnect (2) | 2024.12.16 |
hydrate (0) | 2024.12.16 |
findDOMNode (0) | 2024.12.16 |
createPortal (0) | 2024.12.16 |
- Total
- Today
- Yesterday
- useRef
- dns-prefetch
- usedeferredvalue
- ๋ฐ์ดํฐ์ ์ง
- flushsync
- zustand
- ๋ฒ ํ
- ์คํ์
- state
- useinsertioneffect
- experimental
- react
- useformstatus
- experimental_taintuniquevalue
- finddomnode
- react dom hook
- ์ ์ฅ์
- preconnect
- useid
- react hook
- Props
- react dom
- ์ํ๊ด๋ฆฌ
- component
- experimental_taintobjectreference
- Nextjs
- prefetchdns
- ์ต์ ๋ฐ์ดํฐ
- Store
- ์ธ๋ถํฐํธ
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |