Skip to content

week2 tech

hyeonggyu ham edited this page Nov 15, 2019 · 4 revisions

react와 canvas

μž‘μ„±μž: ν•¨ν˜•κ·œ, μ‘°μ˜λ„

ν•˜λ €κ³  ν–ˆλ˜ 것

react μ»΄ν¬λ„ŒνŠΈμ—μ„œ canvas νƒœκ·Έλ₯Ό μ΄μš©ν•΄μ„œ μ»€λ‹€λž€ ν•„λ“œλ₯Ό ν•˜λ‚˜ λ§Œλ“€κ³ , κ·Έ μœ„μ— 캐릭터듀을 보여쀄 수 있게 ν•˜μž!

첫번째 μ‚°

  • canvas에 이미지λ₯Ό ν‘œμ‹œν•˜λ €λ©΄, canvas DOM의 contextλ₯Ό λ§Œλ“€κ³  contextλ₯Ό μ΄μš©ν•΄μ„œ drawImage ν•¨μˆ˜λ₯Ό λΆˆλŸ¬μ£Όμ–΄μ•Ό ν•œλ‹€.
  • 그런데 reactλŠ” μ»΄ν¬λ„ŒνŠΈλ‘œ κ΄€λ¦¬λ˜κΈ° λ•Œλ¬Έμ—, DOM μ‘°μž‘μ„ ν”Όν•΄μ•Ό ν•œλ‹€.
  • ref둜 ν•΄κ²°!
reactμ—μ„œ 직접적인 DOM μ‘°μž‘μ΄ λΆˆκ°€ν”Όν•  경우, refλ₯Ό μ‚¬μš©ν•œλ‹€.
html의 id처럼, react λ‚΄λΆ€μ—μ„œ refλ₯Ό μ‚¬μš©ν•΄μ„œ DOM에 이름을 λ§Œλ“€ 수 μžˆλ‹€.
ref의 μ‚¬μš©λ²•μ—λŠ” μ—¬λŸ¬κ°€μ§€κ°€ μžˆλŠ”λ°, DOM μš”μ†Œ ν˜Ήμ€ 클래슀 μ»΄ν¬λ„ŒνŠΈλ₯Ό μ°Έμ‘°ν•˜λŠ” ν•œ ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈ λ‚΄λΆ€μ—μ„œ ref 속성을 μ‚¬μš©ν•  수 μžˆλ‹€.

  • μ»΄ν¬λ„ŒνŠΈ λ‚΄λΆ€μ—μ„œ refλ₯Ό λ§Œλ“  ν›„ DOM에 refλ₯Ό μ„€μ •ν•΄μ£Όλ©΄, μ»΄ν¬λ„ŒνŠΈ λ‚΄λΆ€μ—μ„œ ref.current둜 μ ‘κ·Όν•  수 μžˆλ‹€. 단, μ»΄ν¬λ„ŒνŠΈκ°€ λ‘œλ“œλœ ν›„ DOM을 가져와야 ν•˜λ―€λ‘œ useEffect ν•¨μˆ˜λ₯Ό μ΄μš©ν•˜λ©΄ μ’‹λ‹€.

λ‘λ²ˆμ§Έ μ‚°

  • cavas νƒœκ·Έμ— width/heightλ₯Ό css둜 μ μš©ν•˜κ³ , drawImage둜 캐릭터λ₯Ό ν‘œμ‹œν•˜μž 캐릭터가 μ˜λ„ν–ˆλ˜ μ‚¬μ΄μ¦ˆμ™€ μ „ν˜€ λ‹€λ₯΄κ²Œ ν‘œμ‹œλ˜λŠ” λ¬Έμ œκ°€ 생겼닀. ...?

  • html μ†μ„±μœΌλ‘œ ν•΄κ²°

css둜 μΊ”λ²„μŠ€μ˜ λ„ˆλΉ„μ™€ 높이λ₯Ό μ‘°μ •ν•˜λ©΄, μ‹€μ œ μΊ”λ²„μŠ€κ°€ λŠ˜μ–΄λ‚˜κ±°λ‚˜ μ••μΆ•λ˜μ–΄ λ‚΄μš©μ΄ ν™•λŒ€/μΆ•μ†Œ λœλ‹€.
λŒ€μ‹  이전 HTML λ„ˆλΉ„ 및 높이 속성을 μ‚¬μš©ν•˜λ©΄ λœλ‹€.

λΉ„μœ¨μ΄ 맞게 μ‘°μ •λ˜μ—ˆλ‹€.

μ„Έλ²ˆμ§Έ μ‚°

  • 캐릭터 이미지가 가끔씩 μ•„μ˜ˆ ν‘œμ‹œλ˜μ§€ μ•ŠλŠ” λ¬Έμ œκ°€ λ°œμƒν–ˆλ‹€.
  • canvas context의 drawImage ν•¨μˆ˜κ°€ imageκ°€ λ‘œλ“œλ˜κΈ° 전에 싀행될 경우, 그릴 imageκ°€ μ—†κΈ° λ•Œλ¬Έμ— ν‘œμ‹œλ˜μ§€ μ•Šμ•˜λ˜ κ²ƒμ΄μ—ˆλ‹€.
  • onload둜 ν•΄κ²°
drawImage ν•¨μˆ˜ ν˜ΈμΆœμ„ ν•΄λ‹Ή image의 onloadν•¨μˆ˜μ˜ μ½œλ°±ν•¨μˆ˜λ‘œ μ£Όλ©΄, imageκ°€ λ‘œλ“œλœ 후에 drawλ₯Ό ν•˜κΈ°λ•Œλ¬Έμ— 항상 이미지가 ν‘œμ‹œλœλ‹€.

Clone this wiki locally