Front/React.js

[React] ๋ฆฌ์•กํŠธ ๋ฒ„์ „ 18

ddo04 2024. 8. 25. 22:37

๐Ÿ˜ญ Automatic Batching

  • ์•ž์—์„œ ๋ฐฐ์šด ๊ฒƒ์ฒ˜๋Ÿผ ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋Š” ์ƒํƒœ๊ฐ€ ์—…๋ฐ์ดํŠธ๋  ๋•Œ๋งˆ๋‹ค ์žฌ๋ Œ๋”๋ง์ด ์ด๋ค„์ง€๊ธฐ ๋•Œ๋ฌธ์—, ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ์—์„œ ๊ฐ๊ฐ์˜ ์Šคํ…Œ์ดํŠธ๊ฐ€ ์—…๋ฐ์ดํŠธ๋  ๋•Œ๋งˆ๋‹ค ์žฌ๋ Œ๋”๋ง์ด ๋ฐœ์ƒ
  • ์œ ์ฆˆ ์Šคํ…Œ์ดํŠธ ํ›…์„ ์‚ฌ์šฉํ•ด์„œ ์„ ์–ธํ•œ ๊ฐ ์Šคํ…Œ์ดํŠธ๋“ค์˜ set ํ•จ์ˆ˜๋ฅผ ๊ฑฐ์˜ ๋™์‹œ์— ํ˜ธ์ถœํ•˜๋”๋ผ๋„ ํ˜ธ์ถœ๋œ ํšŸ์ˆ˜๋งŒํผ ์žฌ๋ Œ๋”๋ง์ด ๋ฐœ์ƒ
  • ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ์—ฌ๋Ÿฌ ์ƒํƒœ์˜ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋™์‹œ์— ๋ฐœ์ƒํ•˜๋ฉด ์ด ์ž‘์—…๋“ค์„ ๋ฌถ์–ด์„œ ํ•œ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋ฐฐ์นญ
  • ๋ฐฐ์นญ์€ ์ปดํ“จํ„ฐ ๊ณตํ•™์—์„œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ž‘์—…์„ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•œ๋‹ค๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ–๊ณ  ์žˆ์Œ
  • ๋ฆฌ์•กํŠธ์—์„œ์˜ ๋ฐฐ์นญ์€ ์—ฌ๋Ÿฌ ์ƒํƒœ์˜ ์—…๋ฐ์ดํŠธ ์ž‘์—…์„ ํ•œ ๋ฒˆ์— ๋ฌถ์–ด์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ดํ•ดํ•˜๋ฉด ๋จ
  • ๊ธฐ์กด ๋ฆฌ์•กํŠธ ๋ฒ„์ „์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๋ฐฐ์นญ์ด ๋ฆฌ์•กํŠธ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋‚ด์—์„œ๋งŒ ์ด๋ฃจ์–ด์ง

  • ๋ฆฌ์•กํŠธ ๋ฒ„์ „ 18์—์„œ ์˜คํ† ๋ฉ”ํ‹ฑ ๋ฐฐ์นญ์ด๋ผ๋Š” ๊ฒƒ์ด ์ƒˆ๋กญ๊ฒŒ ๋“ฑ์žฅํ•˜์˜€๊ณ , ์ž๋™์œผ๋กœ ์—ฌ๋Ÿฌ ์ƒํƒœ์˜ ์—…๋ฐ์ดํŠธ ์ž‘์—…์„ ๋ฌถ์–ด์„œ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌ
// ๊ธฐ์กด ๋ฒ„์ „
setTimeout(() => {
	setCount((count) => count + 1);
    setIsFull((isFull) => !isFull);
    // ๊ฐ state์˜ ์—…๋ฐ์ดํŠธ๋งˆ๋‹ค ์žฌ๋ Œ๋”๋ง ๋ฐœ์ƒ
}, 1000)

// ํ˜„์žฌ ๋ฒ„์ „
setTimeout(()=> {
	setCount((count) => count + 1);
    setIsFull((isFull) => !isFull);
    // ์žฌ๋ Œ๋”๋ง์ด ๋งˆ์ง€๋ง‰์— ํ•œ ๋ฒˆ๋งŒ ๋ฐœ์ƒ
}, 1000);
  • ๋จผ์ € ๊ธฐ์กด ๋ฒ„์ „์—์„œ๋Š” ๊ฐ ์Šคํ…Œ์ดํŠธ์˜ ์—…๋ฐ์ดํŠธ๋งˆ๋‹ค ์žฌ๋ Œ๋”๋ง์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋จ
  • setCount ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜์—ˆ์„ ๋•Œ์™€ setIsFull ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋์„ ๋•Œ ๊ฐ๊ฐ ์žฌ๋ Œ๋”๋ง ๋ฐœ์ƒ
  • ํ˜„์žฌ ๋ฒ„์ „์ธ ๋ฒ„์ „ 18์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์ƒํƒœ ์—…๋ฐ์ดํŠธ ์ž‘์—…์„ ์ž๋™์œผ๋กœ ๋ฌถ์–ด์„œ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์˜คํ† ๋งคํ‹ฑ ๋ฐฐ์นญ์ด๋ฉฐ ๊ฒฐ๊ณผ์ ์œผ๋กœ ์žฌ๋ Œ๋”๋ง์ด ํ•œ ๋ฒˆ๋งŒ ๋ฐœ์ƒํ•˜๊ฒŒ ๋จ

๐Ÿ˜ญ Transitions

  • ํŠธ๋ Œ์ง€์…˜์€ ๋ฆฌ์•กํŠธ์—์„œ ๊ธด๊ธ‰ํ•œ ์—…๋ฐ์ดํŠธ์™€ ๊ธด๊ธ‰ํ•˜์ง€ ์•Š์€ ์—…๋ฐ์ดํŠธ๋ฅผ ๊ตฌ๋ถ„ํ•ด์„œ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ƒˆ๋กœ์šด ๊ฐœ๋…
  • ์—…๋ฐ์ดํŠธ์˜ ํ˜•ํƒœ๋ฅผ ๋‚˜๋ˆ„์–ด ์‚ฌ์šฉ์ž์—๊ฒŒ ๋” ๋น ๋ฅด๊ณ  ์ข‹์€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•จ 
  • ์›น์‚ฌ์ดํŠธ์˜ ์ž…๋ ฅ ์–‘์‹์— ํ‚ค๋ณด๋“œ๋กœ ๊ธ€์ž๋ฅผ ์ž…๋ ฅํ–ˆ๋Š”๋ฐ ๊ธ€์ž๊ธฐ ๋А๋ฆฌ๊ฒŒ ์ž…๋ ฅ๋˜๊ฑฐ๋‚˜ ๋ช‡ ์ดˆ๊ฐ€ ์ง€๋‚˜์„œ ์ž…๋ ฅ๋œ๋‹ค๋ฉด ์‚ฌ์šฉ์ž๋Š” ์›น์‚ฌ์ดํŠธ์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ
  • ๋ฆฌ์•กํŠธ ๋ฒ„์ „ 18์—์„œ๋Š” ์—…๋ฐ์ดํŠธ์˜ ์ข…๋ฅ˜๋ฅผ ๋‚˜๋ˆ„๊ณ  ๊ธด๊ธ‰ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ๋จผ์ € ์ฒ˜๋ฆฌํ•จ์œผ๋กœ์จ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋” ๋‚˜์€ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๋„๋ก ํ•œ ๊ฒƒ
import {startTransition} from 'react';
// ๊ธด๊ธ‰ ์—…๋ฐ์ดํŠธ: ์ž…๋ ฅํ•œ ๊ธ€์ž๋ฅผ ํ™”๋ฉด์— ๋ณด์—ฌ์ฃผ์–ด์•ผ ํ•จ
setInputValue(input);

// ํ•จ์ˆ˜ ๋‚ด์— ์žˆ๋Š” ๋ชจ๋“  ์—…๋ฐ์ดํŠธ๋Š” Transition ์—…๋ฐ์ดํŠธ๊ฐ€ ๋จ
startTransition(() => {
	// Transition ์—…๋ฐ์ดํŠธ: ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ฃผ์–ด์•ผ ํ•จ
    setSearchQuery(input);
});
  • ๋ฆฌ์•กํŠธ์—์„œ ์ œ๊ณตํ•˜๋Š” StartTransition์ด๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ํ•œ ๋ฒˆ์˜ ์ž…๋ ฅ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์—…๋ฐ์ดํŠธ๋ฅผ ๋‚˜๋ˆ ์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ
  • ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์€ ๊ธด๊ธ‰ํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•  ์—…๋ฐ์ดํŠธ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด๊ณผ ๋™์ผํ•˜๊ฒŒ ์ƒํƒœ ์—…๋ฐ์ดํŠธ ์ง„ํ–‰
  • ์ดํ›„์— ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์€ ์•„์ฃผ ๊ธด๊ธ‰ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜์ง€๋Š” ์•Š์•„๋„ ๋˜๋Š” ๋ถ€๋ถ„์ด๊ธฐ ๋•Œ๋ฌธ์— StartTransition ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ TransitionUpdate๋กœ ์ฒ˜๋ฆฌ
  • Transition ์—…๋ฐ์ดํŠธ๋Š” ๊ธด๊ธ‰ํ•˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ์‚ฌ์ด์— ๋” ๊ธด๊ธ‰ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ์ค‘๋‹จ

๐Ÿ˜ญ ์—…๋ฐ์ดํŠธ์˜ ์ข…๋ฅ˜

  • ๊ธด๊ธ‰ํ•œ ์—…๋ฐ์ดํŠธ
    • ์‚ฌ์šฉ์ž์™€ ์ง์ ‘์ ์ธ ์ธํ„ฐ๋ž™์…˜์ด ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ
    • ์˜ˆ) ๊ธ€์ž ์ž…๋ ฅ, ๋ฒ„ํŠผ ํด๋ฆญ ๋“ฑ
  • ๊ธด๊ธ‰ํ•˜์ง€ ์•Š์€ ์—…๋ฐ์ดํŠธ
    • ์‚ฌ์šฉ์ž์™€ ์ง์ ‘์ ์ธ ์ธํ„ฐ๋ž™์…˜์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ
    • ์˜ˆ) ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„์™€์„œ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒฝ์šฐ

๐Ÿ˜ญ Suspense

  • React๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋‹ค ๋ณด๋ฉด ์›น์‚ฌ์ดํŠธ์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋ฉด์„œ ์ปดํฌ๋„ŒํŠธ์˜ ์‚ฌ์ด์ฆˆ๋„ ์ปค์ง€๊ฒŒ ๋จ
  • ์›น๋ธŒ๋ผ์šฐ์ €์—์„œ ์ด๋Ÿฐ ํฐ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•œ ๋ฒˆ์— ๋กœ๋”ฉํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ
  • 2018๋…„ ๋ฆฌ์•กํŠธ ๋ฒ„์ „ 16.6์ด ๋ฆด๋ฆฌ์ฆˆ๋  ๋•Œ ์ฒ˜์Œ ๋“ฑ์žฅํ•œ ์ปดํฌ๋„ŒํŠธ
  • ์—ญํ• ์€ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ(children)๊ฐ€ ์ค€๋น„๋˜๊ธฐ ์ „๊นŒ์ง€ ๋ Œ๋”๋ง์„ ์ค‘๋‹จํ•˜๋Š” ๊ฒƒ
  • ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ค€๋น„๋œ ์ดํ›„์— ๋ Œ๋”๋ง์„ ์‹œํ‚ด์œผ๋กœ์จ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํ–ฅ์ƒ์‹œ์ผœ์ค„ ์ˆ˜ ์žˆ์Œ
import {lazy, Suspense} from 'react';
import LoadingSpinner from './LoadingSpinner';
const OtherComponent = lazy(() => import('./OtherComponent'));

function MyComponent(props) {
	return (
    	<Suspense fallback={<LoadingSpinner />}>
        	<OtherComponent />
        >/Suspense>
    );
}

export default MyComponent;
  • Other ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ค€๋น„๋˜๊ธฐ ์ „๊นŒ์ง€ Fallback ์†์„ฑ์— ๋“ค์–ด๊ฐ€์žˆ๋Š” Loading Spinner๋ผ๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ™”๋ฉด์— ๋ณด์—ฌ์ฃผ๊ณ , Other ์ปดํฌ๋„ŒํŠธ๊ฐ€  ์ค€๋น„๋˜๋ฉด ๊ทธ๋•Œ Other ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ™”๋ฉด์— ๋ณด์—ฌ์ฃผ๊ฒŒ ๋จ
  • ๊ธฐ์กด์˜ Suspense๋Š” ์ด๋ ‡๊ฒŒ ํด๋ผ์ด์–ธํŠธ์—์„œ ์ฝ”๋“œ ์Šคํ”„๋ฆฌํŒ…๊ณผ ํ•จ๊ป˜ ์ œํ•œ์ ์œผ๋กœ๋งŒ ์‚ฌ์šฉ์ด์—ˆ๋Š”๋ฐ. React ๋ฒ„์ „ 18์—์„œ๋Š” Suspense๋ฅผ ์„œ๋ฒ„ ๋ Œ๋”๋ง๊ณผ ์ œํ•œ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ํŒจ์นญ์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์—…๋ฐ์ดํŠธ 
  • ์•ž์œผ๋กœ ๊ณ„์†ํ•ด์„œ ๋ฐœ์ „ํ•œ๋‹ค๊ณ  ํ•˜๋‹ˆ ๊ด€์‹ฌ์„ ๊ฐ–๊ณ  ์ง€์ผœ๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค

๐Ÿ˜ญ Code Splitting

  • ๊ฐœ๋ฐœ์ž๋“ค์€ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ปดํฌ๋„ŒํŠธ์˜ ์ฝ”๋“œ๋ฅผ ์—ฌ๋Ÿฌ ์กฐ๊ฐ์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ์ฝ”๋“œ ์Šคํ”ผ๋ฆฌํŒ…์ด๋ผ๋Š” ๊ธฐ๋ฒ•์„ ์ ์šฉ
  • ๋ถ„๋ฆฌ๋œ ๋กœ์ง์„ ์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ๋ ˆ์ด์ง€ ๋กœ๋”ฉ ๋˜๋Š” ๋‹ค์ด๋‚˜๋ฏน ๋กœ๋”ฉ์ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๋™์  ๋กœ๋”ฉ ๊ธฐ๋ฒ•์„ ์ ์šฉํ•˜์—ฌ ์›น์‚ฌ์ดํŠธ์˜ ๋ฐ˜์‘ ์†๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ๊ฒŒ ๋จ

๐Ÿ˜ญ ๋ฆฌ์•กํŠธ DOM ํด๋ผ์ด์–ธํŠธ

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';

ReactDOM.render{
	<React.StrictMode>
    	<App />
    </React.StrictMode>
    document.getElementById('root')
);
  • ๊ธฐ์กด์—๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ Œ๋”๋ง์„ ์œ„ํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ react-dom.render ํ•จ์ˆ˜ ์‚ฌ์šฉ
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
	<React.StricMode>
    	<App />
    </React.StricMode>
);
  •  ๋ฆฌ์•กํŠธ ๋ฒ„์ „ 18์—์„œ๋Š” react-dom/client๋ผ๋Š” ํŒจํ‚ค์ง€๊ฐ€ ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋˜์—ˆ๊ณ , create-root ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ Œ๋”๋ง์„ ํ•˜๊ฒŒ ๋จ
  • ํ•˜์œ„ ํ˜ธํ™˜์„ฑ ๋•Œ๋ฌธ์— ๊ธฐ์กด ๋ฐฉ์‹๋„ ์—ฌ์ „ํžˆ ์ง€์›ํ•˜์ง€๋งŒ ์ƒˆ๋กœ์šด API๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฆฌ์•กํŠธ ๋ฒ„์ „ 18์— ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ๋“ค์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ
  • ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ Œ๋”๋ง์„ ์œ„ํ•ด์„œ๋Š” createRoot๋ฅผ ์‚ฌ์šฉ

๐Ÿ˜ญ ๋ฆฌ์•กํŠธ DOM ์„œ๋ฒ„

  • renderToPipeableStream
    • NodeJS ํ™˜๊ฒฝ์—์„œ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ์œ„ํ•œ ํ•จ์ˆ˜
  • renderToReadableStream
    • Edge runtime ํ™˜๊ฒฝ์„ ์œ„ํ•œ ํ•จ์ˆ˜

๐Ÿ˜ญ Strict Mode

  • ๋ฆฌ์•กํŠธ์˜ Strict ๋ชจ๋“œ๋Š” ๊ฐœ๋ฐœ ๋ชจ๋“œ์ผ ๋•Œ ์ž ์žฌ์ ์ธ ๋ฒ„๊ทธ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ชจ๋“œ
  • ๋ฆฌ์•กํŠธ ๋ฒ„์ „18์—์„œ๋Š” Strict ๋ชจ๋“œ์˜ ๋™์ž๊ธฐ ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”๋ฐ, ๊ฐœ๋ฐœ ๋ชจ๋“œ์—์„œ Strict ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์–ธ๋งˆ์šดํŠธ ์‹œ์ผฐ๋‹ค๊ฐ€ ๋‹ค์‹œ ํ•œ ๋ฒˆ ๋งˆ์šดํŠธ ์‹œํ‚ด
  • ์ปดํฌ๋„ŒํŠธ์˜ ์ƒ๋ช… ์ฃผ๊ธฐ ํ•จ์ˆ˜๋“ค์ด ์˜ˆ์ƒ๊ณผ ๋‹ค๋ฅด๊ฒŒ ์—ฌ๋Ÿฌ ๋ฒˆ ํ˜ธ์ถœ๋  ์ˆ˜ ์žˆ์Œ
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
	<React.StricMode>
    	<App />
    </React.StricMode>
);
  • ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ์˜ ๊ฒฝ์šฐ ์ปดํฌ๋„ŒํŠธ ๋””๋“œ ๋งˆ์šดํŠธ๊ฐ€ ํ•œ ๋ฒˆ ํ˜ธ์ถœ๋œ ๋‹ค์Œ ์ปดํฌ๋„ŒํŠธ ์œŒ์—… ๋งˆ์šดํŠธ๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ  ์ดํ›„ ๋‹ค์‹œ ์ปดํฌ๋„ŒํŠธ ๋””๋“œ ๋งˆ์šดํŠธ๊ฐ€ ํ˜ธ์ถœ
  •  ์ด๋Ÿฌํ•œ ์ ์„ ์ž˜ ์ธ์ง€ํžˆ๊ณ  ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์—ฌ๋Ÿฌ ๋ฒˆ ๋งˆ์šดํŠธ ๋˜์–ด๋„ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ์ง€ ์•Š๋„๋ก ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”

๐Ÿ˜ญ useId() ํ›…

  • ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์—์„œ ๊ณ ์œ ํ•œ id ๊ฐ’์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํ›…
  • ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ Œ๋”๋งํ•  ๋•Œ ๋งต ํ•จ์ˆ˜ ๋‚ด์—์„œ ๋ฐ˜ํ™˜ํ•˜๋Š” element์˜ key๋กœ ์‚ฌ์šฉํ•˜๋Š” ์šฉ๋„๋Š” ์•„๋‹˜

๐Ÿ˜ญ useTransitions() ํ›…

  • ์•ž์— ํŠธ๋ Œ์ง€์…˜์—์„œ ๋‹ค๋ค˜๋˜ ๊ธด๊ธ‰ํ•˜์ง€ ์•Š์€ ์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•œ ํ›…
  • ๊ธฐ๋ณธ์ ์œผ๋กœ ์ผ๋ฐ˜์ ์ธ ์ƒํƒœ ์—…๋ฐ์ดํŠธ๋Š” ๊ธด๊ธ‰ํ•œ ์—…๋ฐ์ดํŠธ๋กœ ์ฒ˜๋ฆฌ๋˜๋ฉฐ, useTransitionHook์ด๋‚˜ startTransition ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธด๊ธ‰ํ•˜์ง€ ์•Š์€ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ชจ์•„์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ

๐Ÿ˜ญ useDeferredValue() ํ›…

  • ๊ธด๊ธ‰ํ•˜์ง€ ์•Š์€ ์—…๋ฐ์ดํŠธ๋ฅผ ์žฌ๋ Œ๋”๋งํ•˜๋Š” ๊ฒƒ์„ ์—ฐ๊ธฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํ›…
  • ์งง์€ ์‹œ๊ฐ„์— ํ•œ ๊ฐ€์ง€ ์ƒํƒœ์˜ ์—…๋ฐ์ดํŠธ๊ฐ€ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋ฉด ์ตœ์ข… ์ƒํƒœ๊ฐ’๋งŒ์„ ์—…๋ฐ์ดํŠธ
  • ๋ณดํ†ต ๊ฐ’์ด ํŠ€๋Š” ๊ฒƒ์„ ๋ง‰๋Š”๋‹ค๋Š” ์˜๋ฏธ๋กœ ๋””๋ฐ”์šด์‹ฑ์ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š”๋ฐ, useDeferredValue Hook์ด ํ•˜๋Š” ์—ญํ• ๋„ ๋น„์Šทํ•˜๋‹ค๊ณ  ๋ณด๋ฉด ๋จ
  • ์ง€์—ฐ๋œ ๋ Œ๋”๋ง์€ ์ค‘๋‹จ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ์ฐจ๋‹จํ•˜์ง€ ์•Š์Œ

๐Ÿ˜ญ useSyncExternalStore() ํ›…

  • ์™ธ๋ถ€ ์ €์žฅ์†Œ๋ฅผ ๊ตฌ๋…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํ›…
  • ์™ธ๋ถ€ ์ €์žฅ์†Œ๋ฅผ React ์ปดํฌ๋„ŒํŠธ์˜ State์™€ ์—ฐ๋™ํ•ด์„œ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋จ
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๊ฐ€ ์ด๋‹Œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž…๋ฌธ์ž๋ถ„๋“ค์ด ์‚ฌ์šฉํ•˜๋Š” ์ผ์€ ๊ฑฐ์˜ ์—†๋‹ค๊ณ  ๋ณด๋ฉด ๋จ

๐Ÿ˜ญ useInsertionEffect() ํ›…

  • CSS in JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์œ„ํ•œ ํ›…
  • ๋ Œ๋”๋ง ๊ณผ์ •์—์„œ ์Šคํƒ€์ผ ์‚ฝ์ž…์˜ ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ
  • useInsertionEffect๋„ ์•ž์— ๋‚˜์˜จuseSyncExternalStore๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๊ฐ€ ์•„๋‹Œ CSS์ธ JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์ธ ๋ฆฌ์•กํŠธ ๊ฐœ๋ฐœ๋ถ„์ด ์‚ฌ์šฉํ•˜๋Š” ์ผ์€ ๊ฑฐ์˜ ์—†์Œ

 

๊ณต๋ถ€ํ•œ ๊ฐ•์˜ ์ž๋ฃŒ

https://www.inflearn.com/course/%EC%B2%98%EC%9D%8C-%EB%A7%8C%EB%82%9C-%EB%A6%AC%EC%95%A1%ED%8A%B8/dashboard

 

[์ง€๊ธˆ ๋ฌด๋ฃŒ] ์ฒ˜์Œ ๋งŒ๋‚œ ๋ฆฌ์•กํŠธ(React) ๊ฐ•์˜ | Inje Lee (์†Œํ”Œ) - ์ธํ”„๋Ÿฐ

Inje Lee (์†Œํ”Œ) | ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ CSS ๊ธฐ์ดˆ ๋ฌธ๋ฒ•๊ณผ ํ•จ๊ป˜ ๋ฆฌ์•กํŠธ์˜ ๊ธฐ์ดˆ๋ฅผ ํƒ„ํƒ„ํ•˜๊ฒŒ ๋‹ค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., ๊น”๋”ํ•œ ๊ฐ•์˜์ž๋ฃŒ, ๊ผผ๊ผผํ•œ ์„ค๋ช…์œผ๋กœ์‰ฝ๊ฒŒ ๋ฐฐ์šฐ๋Š” ๋ฆฌ์•กํŠธ ๊ฐ•์˜์ž…๋‹ˆ๋‹ค. ๐Ÿ‘จ‍๐Ÿซ ๋ฆฌ์•กํŠธ์˜ ์„ธ๊ณ„๋กœ

www.inflearn.com