Transition

Transition

μ•±μ˜ μ—…λ°μ΄νŠΈ 쀑에 응닡성을 μœ μ§€ν•˜λŠ”λ° 도움을 μ£ΌλŠ” v18에 μƒˆλ‘­κ²Œ μΆ”κ°€λœ API

  • νŠΉμ • μ—…λ°μ΄νŠΈλ₯Ό "Transition"을 ν‘œμ‹œν•˜μ—¬ μ‚¬μš©μž μΈν„°λ ‰μ…˜μ„ 크게 ν–₯μƒμ‹œν‚¬ 수 μžˆλ‹€.

  • μƒνƒœ μ „ν™˜ 쀑에 μ‹œκ°μ  ν”Όλ“œλ°±μ„ μ œκ³΅ν•˜κ³  μ „ν™˜ν•˜λŠ” λ™μ•ˆ λΈŒλΌμš°μ € 응닡성을 μœ μ§€ν•  수 μžˆλ‹€.

  • λ¦¬μ—‘νŠΈμ—κ²Œ μ–΄λ–€ μ—…λ°μ΄νŠΈκ°€ κΈ΄κΈ‰ν•œμ§€(urgent) μ•„λ‹Œμ§€(transition)λ₯Ό μ•Œλ €μ£Όμ–΄ μ—…λ°μ΄νŠΈμ˜ μš°μ„ μˆœμœ„λ₯Ό μ •ν•  수 있게 λœλ‹€.

μ‘λ‹΅μ„±μ΄λž€?

앱이 μ—…λ°μ΄νŠΈλ˜κ±°λ‚˜ λ‹€λ₯Έ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” λ™μ•ˆμ—λ„ μ‚¬μš©μžκ°€ 앱을 계속 μ‚¬μš©ν•  수 있고, 앱이 λŠκΉ€ 없이 μž‘λ™ν•˜λŠ” μƒνƒœλ₯Ό μ˜λ―Έν•œλ‹€.

import { startTransition } from 'react';

// urgent update β†’ κΈ°μ‘΄ μ‚¬μš©ν•˜λŠ” 방식 κ·ΈλŒ€λ‘œ
setInputValue(value);

// transition update
startTransition(() => {
  setSearchResult(value)
})
  • startTransition() 으둜 λž˜ν•‘λœ μ—…λ°μ΄νŠΈλŠ” κΈ΄κΈ‰ν•˜μ§€ μ•Šμ€κ²ƒμœΌλ‘œ 처리되며 λ‹€λ₯Έ κΈ΄κΈ‰ν•œ μ—…λ°μ΄νŠΈκ°€ 호좜되면 μž‘μ—…μ„ μ€‘λ‹¨ν•œλ‹€.

  • transition μ—…λ°μ΄νŠΈκ°€ 보λ₯˜λ˜λ©΄ μ™„λ£Œλ˜μ§€ μ•Šμ€ 였래된 λ Œλ”λ§ μž‘μ—…μ„ 날리고 μ΅œμ‹  μ—…λ°μ΄νŠΈλ§Œ λ Œλ”λ§ν•œλ‹€.

  • Transition을 μ‚¬μš©ν–ˆμ„ λ•Œ UIκ°€ 크게 λ³€κ²½λ˜λ”λΌλ„ λŒ€λΆ€λΆ„μ˜ μƒν˜Έμž‘μš©μ„ λΉ λ₯΄κ²Œ μœ μ§€ κ°€λŠ₯ν•˜λ‹€.

  • 더이상 κ΄€λ ¨μ—†λŠ” 컨텐츠λ₯Ό λ Œλ”λ§ν•˜λŠ”λ° μ‹œκ°„μ„ λ‚­λΉ„ν•˜μ§€ μ•Šκ²Œ λœλ‹€.

보λ₯˜ 쀑인 Transition update

  • μš°μ„ μˆœμœ„κ°€ λ°€λ € 보λ₯˜ 쀑인 μ—…λ°μ΄νŠΈλŠ” isPending ν”Œλž˜κ·Έλ₯Ό 톡해 μƒνƒœλ₯Ό 확인할 수 μžˆλ‹€.

import { useTransition } from 'react';

const { isPending, startTransition } =  useTransition();

{ isPending && <Spinner /> }

React 18 μ΄μ „μ—λŠ” λ™μΌν•œ μž‘μ—…μ„ μ–΄λ–»κ²Œ μ²˜λ¦¬ν–ˆμ„κΉŒ?

  • setTimeout을 μ‚¬μš©ν•˜μ—¬ ν˜ΈμΆœμ„ λ’€λ‘œ λ―Έλ£¨κ±°λ‚˜

  • stateλ₯Ό λ‘κ°œλ‘œ λ‚˜λˆ„μ–΄ debounce둜 μ—…λ°μ΄νŠΈ μ£ΌκΈ°λ₯Ό λ‹€λ₯΄κ²Œ κ°€μ Έκ°€λŠ” 방식을 자주 μ‚¬μš©

  • μœ„ 두 방식 λͺ¨λ‘ 이벀트 μ²˜λ¦¬κ°€ Schedule λ˜μ–΄ 있고 λ’€λ‘œ λ°€λ¦¬λŠ” 것이기 λ•Œλ¬Έμ— μ΄λ²€νŠΈκ°€ λλ‚˜λ„ 계속 κ²°κ³Όλ₯Ό ν‘œμΆœν•˜κ²Œ 됨

    • Transition은 보λ₯˜λ˜λ©΄ 이전 μž‘μ—…μ„ μ œκ±°ν•œλ‹€.

Last updated