Skip to content

Latest commit

ย 

History

History
36 lines (30 loc) ยท 2.42 KB

concurrency-rendering.md

File metadata and controls

36 lines (30 loc) ยท 2.42 KB

๋™์‹œ์„ฑ ๋ Œ๋”๋ง์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌ์•กํŠธ 18๋ฒ„์ „ ํ›…

์ง€์—ฐ๋œ ๋ Œ๋”๋ง์€ ์ค‘๋‹จ๊ฐ€๋Šฅ, ์‚ฌ์šฉ์ž์˜ ์ธํ„ฐ๋ ‰์…˜์„ ์ฐจ๋‹จํ•˜์ง€์•Š๋Š”๋‹ค

๋™์‹œ์„ฑ ๋ Œ๋”๋ง์„ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ํ›…

  • useTransition

    • ๋ฌด๊ฑฐ์šด ์—ฐ์‚ฐ UI ์กฐ๊ฐ์„ ๋ Œ๋”๋ง ์ผ์œผํ‚ค๋Š” ์ƒํƒœ ์—…๋ฐ์ดํŠธ์— ๋Œ€ํ•ด ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋ถ€์—ฌํ•˜์—ฌ ์ƒํƒœ ๋ณ€๊ฒฝ์„ ์ง€์—ฐ์‹œ์ผœ์„œ ๋ Œ๋”๋ง์„ ์ง€์—ฐ์‹œํ‚จ๋‹ค.
    • startTransition์— ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ธ์ˆ˜๋กœ ๋ฐ›๋Š”๋‹ค
    • ๋น„๋™๊ธฐ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ startTransition์— ๋น„๋™๊ธฐํ•จ์ˆ˜๋Š” ๋„ฃ์„ ์ˆ˜ ์—†๋‹ค. (์‹คํ–‰์‹œ์ ์ด ๋ถˆํ™•์‹คํ•ด์ง€๋ฏ€๋กœ ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ ๋งž์ง€์•Š์Œ)
    1. ๋น„๋™๊ธฐ ๋ Œ๋”๋ง (์ง€์—ฐ ๋ Œ๋”๋ง) ์ฒ˜๋ฆฌ
    2. ๋กœ๋”ฉ ์ƒํƒœ ๊ด€๋ฆฌ
    3. ๋‚ฎ์€ ๋ Œ๋”๋ง ์šฐ์„ ์ˆœ์œ„ const [isPending, startTransition] = useTransition();
  • useDeferredValue

    • useTransition๊ณผ ๋‹ค๋ฅด๊ฒŒ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ ์ƒํƒœ ๊ฐ’์ž์ฒด๋ฅผ ์ธ์ˆ˜๋กœ ๋ฐ›๋Š”๋‹ค.
    • ๋””๋ฐ”์šด์Šค์™€ ๋น„์Šท, ๊ทธ๋Ÿฌ๋‚˜ ๋””๋ฐ”์šด์Šค์™€ ๋‹ฌ๋ฆฌ ๊ณ ์ •๋œ ์ง€์—ฐ์‹œ๊ฐ„ ์—†์ด ์ฒซ๋ฒˆ์งธ ๋ Œ๋”๋ง์ด ์™„๋ฃŒ๋œ ํ›„์— ์ง€์—ฐ๋œ ๋ Œ๋”๋ง์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
    • useTransition์™€ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์—๋งŒ ์ฐจ์ด๊ฐ€์žˆ์„๋ฟ, ์ง€์—ฐ๋œ ๋ Œ๋”๋ง์„ ํ•œ๋‹ค๋Š”์ ์—์„œ ๋™์ผํ•˜๋‹ค. const deferredValue = useDeferredValue(value)

๋™์‹œ์„ฑ ์ด์Šˆ - ํ…Œ์–ด๋ง ํ˜„์ƒ ๋ฐœ์ƒ

๊ฐ™์€ ์ƒํƒœ๋ฅผ ๋ฐ”๋ผ๋ณด๋Š” UI ์กฐ๊ฐ์ด ์—ฌ๋Ÿฌ๊ฐœ์ธ ๊ฒฝ์šฐ, ๋ฆฌ์•กํŠธ 18์˜ useTransition, useDeferredValue๋ฅผ ์‚ฌ์šฉํ•œ UI ์กฐ๊ฐ์€ ์ƒํƒœ ๋ณ€๊ฒฝ์„ ์ง€์—ฐ์‹œํ‚จ๋‹ค. ์ด๋•Œ ์ด ํ›…๋“ค์„ ์‚ฌ์šฉํ•˜์ง€์•Š์€ UI์กฐ๊ฐ์€ ์ด์ „ ์ƒํƒœ๋กœ ๋ Œ๋”๋ง์ด ๋˜๋Š”๋ฐ, ํ›…๋“ค์„ ์‚ฌ์šฉํ•œ UI ์กฐ๊ฐ์€ ๋ฌด๊ฑฐ์šด ์—ฐ์‚ฐ์ด ๋๋‚˜๊ณ  ์ƒํƒœ๋ณ€๊ฒฝ ๋ฐ ๋ Œ๋”๋ง์ด ๋˜๋ฏ€๋กœ ๊ฐ™์€ ์ƒํƒœ๋ฅผ ๋ฐ”๋ผ๋ณด์•„๋„ โ€œํ™”๋ฉด์ด ์ฐข์–ด์ง€๋Š”(ํ…Œ์–ด๋ง) ํ˜„์ƒโ€์ด ๋ฐœ์ƒํ•œ๋‹ค.๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ๊ฐ’์„ ๋ Œ๋”๋งํ•˜๊ฒŒ ๋œ๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด useSyncExternalStore๋กœ ์™ธ๋ถ€ ์ƒํƒœ๋ฅผ ๊ตฌ๋…ํ•ด์„œ ์ƒํƒœ ๋™๊ธฐํ™”๋ฅผ ์‹œ์ผœ์•ผํ•œ๋‹ค.

  • ๋™์‹œ์„ฑ ์ด์Šˆ๋Š” ๋ณดํ†ต ์™ธ๋ถ€ ์ƒํƒœ์—์„œ ๋ฐœ์ƒ.
    • ๋ณดํ†ต ๋ฆฌ์•กํŠธ์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ์ƒํƒœ(useState, useReducer)์ธ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•  ํ™•๋ฅ ์ด ์ ์ง€๋งŒ, ๋ฆฌ์•กํŠธ์—์„œ ๊ด€๋ฆฌํ•˜์ง€์•Š๋Š” ์™ธ๋ถ€์ƒํƒœ์ธ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ๋™์‹œ์„ฑ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผํ•œ๋‹ค.

useSyncExternalStore ํ›…

์™ธ๋ถ€ ์ƒํƒœ๋ฅผ ๊ตฌ๋…ํ•ด์„œ ์ƒํƒœ ๋™๊ธฐํ™”๋ฅผ ์‹œ์ผœ์ค€๋‹ค.

useSyncExternalStore(
    subscribe: (callback) => Unsubscribe,
    getSnapshot: () => state
) => State