ํฐ์คํ ๋ฆฌ ๋ทฐ
๐ฏ startTransition์ด๋ ๋ฌด์์ธ๊ฐ์?
startTransition์ React์์ ๊ธด๊ธํ์ง ์์ ํ๋ฉด ์
๋ฐ์ดํธ๋ฅผ "์ฐ์ ์์๋ฅผ ๋ฎ์ถฐ์" ์คํํ๋ ๊ธฐ๋ฅ์ด์์.
๋ณต์กํ ์์
์ผ๋ก ์ธํด ํ๋ฉด์ด ๋ฒ๋ฒ
๊ฑฐ๋ฆฌ๋ ๊ฑธ ๋ง๊ณ , ๋ถ๋๋ฝ๊ฒ ํ๋ฉด์ ์ ํํด์ค์.
๐ ๋น์ ๋ก ์ดํดํ๊ธฐ: ํ๋ฒ๊ฑฐ ๊ฐ๊ฒ ์ด์ผ๊ธฐ
์ฌ๋ฌ๋ถ์ด ํ๋ฒ๊ฑฐ ๊ฐ๊ฒ๋ฅผ ์ด์ํ๊ณ ์๋ค๊ณ ์๊ฐํด ๋ณด์ธ์. ๐
- ์ผ๋ฐ์ ์ธ ์ํฉ
- ์๋์ด ๋์์ ์ฌ๋ฌ ์ฃผ๋ฌธ์ ํด์.
- **ํ๋ฒ๊ฑฐ 10๊ฐ๋ฅผ ๋ง๋๋ ์ผ(๋ฌด๊ฑฐ์ด ์์ )**๊ณผ ํจ๊ป **์๋ก์ด ์๋์ด ์ฃผ๋ฌธํ๋ ๊ฑธ ๋ฐ๋ ์ผ(๊ธด๊ธํ ์์ )**์ด ๊ฒน์น๋ฉด ๊ฐ๊ฒ๋ ์ ์ ์ด ์๊ฒ ์ฃ ?
- ์ด๋ด ๋ ์๋ ์ฃผ๋ฌธ๋ ์ ๋๋ก ๋ชป ๋ฐ๊ณ ๊ฐ๊ฒ๊ฐ ๋ฒ๋ฒ ์ผ ๊ฑฐ์์.
- startTransition์ ์ฌ์ฉํ๋ฉด?
- "ํ๋ฒ๊ฑฐ 10๊ฐ ๋ง๋๋ ๊ฑด ์ ๊น ๋ค๋ก ๋ฏธ๋ฃจ๊ณ , ๋จผ์ ์๋ก์ด ์๋ ์ฃผ๋ฌธ๋ถํฐ ๋ฐ์์ผ์ง!"
- ์ฆ, ๊ธด๊ธํ ์ผ(์ ๋ ฅ, ํด๋ฆญ ๋ฑ)์ ๋จผ์ ์ฒ๋ฆฌํ๊ณ , ๋ฌด๊ฑฐ์ด ์์ ์ ๋์ค์ ์คํํฉ๋๋ค.
- ์ด๋ ๊ฒ ํ๋ฉด ์๋์ ๊ธฐ๋ค๋ฆฌ๊ฒ ํ์ง ์๊ณ ๊ฐ๊ฒ๊ฐ ๋ถ๋๋ฝ๊ฒ ๋์๊ฐ๊ฒ ์ฃ ?
React์์ startTransition๋ ๊ฐ์ ์ญํ ์ ํด์!
ํ๋ฉด์ ๋ถ๋๋ฝ๊ฒ ์ ํํ๊ธฐ ์ํด ์ค์ํ ์์
(๊ธด๊ธ)์ ๋จผ์ ์ฒ๋ฆฌํ๊ณ , ๋ ์ค์ํ ์์
์ ๋์ค์ ์คํํด์ค๋๋ค.
๐ ๏ธ startTransition ์ฌ์ฉ๋ฒ
startTransition์ React์ useTransition ํ
๊ณผ ํจ๊ป ์ฌ์ฉ๋ฉ๋๋ค.
์ด์ ๊ฐ๋จํ ์์ ๋ฅผ ํตํด ์์๋ณผ๊ฒ์!
์์ : ๊ธด๊ธํ ์ ๋ฐ์ดํธ์ ๋ ์ค์ํ ์ ๋ฐ์ดํธ
1. ๊ธฐ๋ณธ ์ฝ๋ (startTransition ์์ด)
import React, { useState } from 'react';
export default function App() {
const [input, setInput] = useState('');
const [items, setItems] = useState([]);
const handleChange = (e) => {
const value = e.target.value;
setInput(value); // ์
๋ ฅ ๊ฐ ์
๋ฐ์ดํธ
const newItems = Array(10000).fill(value); // ๋ฌด๊ฑฐ์ด ์์
: 10,000๊ฐ์ ํญ๋ชฉ ์์ฑ
setItems(newItems); // ํ๋ฉด์ ์๋ก์ด ๋ชฉ๋ก ํ์
};
return (
<div>
<h1>StartTransition ์์ </h1>
<input value={input} onChange={handleChange} placeholder="์
๋ ฅํด๋ณด์ธ์" />
<ul>
{items.map((item, index) => (
<li key={index}>{item}</li>
))}
</ul>
</div>
);
}
์ค๋ช :
- ์ฌ์ฉ์๊ฐ ์ ๋ ฅ์ฐฝ์ ๊ธ์๋ฅผ ์ ๋ ฅํ๋ฉด handleChange๊ฐ ์คํ๋ผ์.
- ๋ฌธ์ ์ :
์ ๋ ฅ์ฐฝ์ ๊ธ์๋ฅผ ์ ๋ ฅํ ๋๋ง๋ค 10,000๊ฐ์ ํญ๋ชฉ์ด ์์ฑ๋๊ธฐ ๋๋ฌธ์ ํ๋ฉด์ด ๋ฒ๋ฒ ๊ฑฐ๋ฆด ์ ์์ด์.
์ฌ์ฉ์๊ฐ ๊ธ์๋ฅผ ์ ๋ ฅํ๋ ๊ธด๊ธํ ์์ ๋ ๋ฆ์ด์ง๊ฒ ์ฃ ?
2. startTransition์ ์ฌ์ฉํด์ ์ต์ ํํ๊ธฐ
startTransition์ ์ฌ์ฉํด ์ ๋ ฅ๊ฐ(๊ธด๊ธ ์์ )์ ์ฆ์ ์ ๋ฐ์ดํธํ๊ณ , ํญ๋ชฉ ์์ฑ(๋ ๊ธด๊ธํ ์์ )์ ๋์ค์ ์คํ๋๋๋ก ๋ง๋ค์ด๋ณผ๊ฒ์.
import React, { useState, startTransition } from 'react';
export default function App() {
const [input, setInput] = useState('');
const [items, setItems] = useState([]);
const handleChange = (e) => {
const value = e.target.value;
setInput(value); // ์
๋ ฅ ๊ฐ์ ๋ฐ๋ก ์
๋ฐ์ดํธ (๊ธด๊ธํ ์์
)
// startTransition์ผ๋ก ๋ฌด๊ฑฐ์ด ์์
์ฒ๋ฆฌ (๋ ์ค์ํ ์์
)
startTransition(() => {
const newItems = Array(10000).fill(value);
setItems(newItems);
});
};
return (
<div>
<h1>StartTransition ์์ </h1>
<input value={input} onChange={handleChange} placeholder="์
๋ ฅํด๋ณด์ธ์" />
<ul>
{items.map((item, index) => (
<li key={index}>{item}</li>
))}
</ul>
</div>
);
}
๐ ์ฝ๋ ์ค๋ช
- ๊ธด๊ธํ ์์
- setInput(value)๋ ์ฆ์ ์คํ๋ผ์ ์ ๋ ฅ์ฐฝ์ ์ ๋ ฅ์ด ๋ฐ๋ก ๋ฐ์๋ฉ๋๋ค.
- ๋ ์ค์ํ ์์
- startTransition ์์ setItems๋ฅผ ๋ฃ์ด์ 10,000๊ฐ์ ํญ๋ชฉ ์์ฑ๊ณผ ๊ฐ์ ๋ฌด๊ฑฐ์ด ์์ ์ ๋์ค์ ์คํ๋ฉ๋๋ค.
- ๊ฒฐ๊ณผ
- ์ ๋ ฅ์ฐฝ์ ๊ธ์๋ฅผ ์ ๋ ฅํ๋ ๋์์ด ๋ฒ๋ฒ ์ด์ง ์๊ณ ๋ถ๋๋ฝ๊ฒ ๋ฐ์ํฉ๋๋ค.
- ๋ฌด๊ฑฐ์ด ์์ ์ ์ ๋ ฅ์ด ๋๋ ํ์ ์คํ๋๋ฏ๋ก ์ฌ์ฉ์ ๊ฒฝํ์ด ์ข์์ ธ์.
๐ startTransition์ด ํ์ํ ์ด์
- UI ๋ฒ๋ฒ
์ ๋ฐฉ์ง
- ๋ฌด๊ฑฐ์ด ์์ ๋๋ฌธ์ ์ ๋ ฅ์ด๋ ํด๋ฆญ ๊ฐ์ ๊ธด๊ธํ ์์ ์ด ๋๋ ค์ง๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด ์ค๋๋ค.
- ์ฌ์ฉ์ ๊ฒฝํ ํฅ์
- ํ๋ฉด์ด ๋ถ๋๋ฝ๊ฒ ์ ํ๋๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ ๊ฒฝํ์ด ํจ์ฌ ์ข์์ง๋๋ค.
- ์ฐ์ ์์ ์ ์ด
- React๊ฐ ๊ธด๊ธํ ์ ๋ฐ์ดํธ๋ฅผ ๋จผ์ ์ฒ๋ฆฌํ๊ณ ๋ ์ค์ํ ์์ ์ ๋์ค์ ์คํํ๊ฒ ํด์ค๋๋ค.
โ ๏ธ ์ฃผ์ํ ์
- React 18 ์ด์์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ
- startTransition์ React 18 ๋ฒ์ ๋ถํฐ ์ ๊ณต๋ฉ๋๋ค.
- ๋ฌด์กฐ๊ฑด ์ฌ์ฉํ๋ ๊ฑด ์๋์์
- ๋ชจ๋ ์์ ์ startTransition์ ์ฌ์ฉํ ํ์๋ ์๊ณ , ๋ฌด๊ฑฐ์ด ์์ ์ด UI๋ฅผ ๋ฐฉํดํ ๋๋ง ์ฌ์ฉํ๋ฉด ๋ผ์.
๐ ํ ์ค ์์ฝ
**startTransition**์ ๊ธด๊ธํ ์์ (์: ์ ๋ ฅ, ํด๋ฆญ)์ด ๋ถ๋๋ฝ๊ฒ ์ฒ๋ฆฌ๋๋๋ก ํ๊ณ , ๋ฌด๊ฑฐ์ด ์์ ์ ๋์ค์ ์คํํ๊ฒ ๋์์ฃผ๋ ๊ธฐ๋ฅ์ด์์.
๐ ๋ง๋ฌด๋ฆฌ
React์ startTransition์ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ถ๋๋ฝ๊ฒ ๋ง๋ค์ด์ฃผ๋ ๋ฉ์ง ๋๊ตฌ์
๋๋ค.
ํ๋ฉด์ด ๋ฒ๋ฒ
๊ฑฐ๋ฆฌ๊ฑฐ๋ ๋๋ ค์ง ๋ ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด UI๋ฅผ ๊น๋ํ๊ณ ๋งค๋๋ฝ๊ฒ ์ ์งํ ์ ์์ด์. ๐
'web > react' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
experimental_taintObjectReference (0) | 2024.12.16 |
---|---|
use (0) | 2024.12.16 |
memo (0) | 2024.12.16 |
lazy (0) | 2024.12.16 |
forwardRef (0) | 2024.12.16 |
- Total
- Today
- Yesterday
- ์ต์ ๋ฐ์ดํฐ
- react dom hook
- ์ ์ฅ์
- ์ธ๋ถํฐํธ
- preconnect
- Store
- react hook
- dns-prefetch
- experimental_taintobjectreference
- useRef
- prefetchdns
- react
- useinsertioneffect
- useid
- component
- usedeferredvalue
- state
- react dom
- finddomnode
- zustand
- experimental
- experimental_taintuniquevalue
- ๋ฒ ํ
- ์ํ๊ด๋ฆฌ
- Props
- ์คํ์
- ๋ฐ์ดํฐ์ ์ง
- useformstatus
- flushsync
- Nextjs
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |