Techniques for dealing with REACT_JSX

the Other ObjectΒ·2023λ…„ 3μ›” 9일
0
  • Reactλ₯Ό λ§Œλ“  이유 : μ§€μ†μ μœΌλ‘œ 데이터가 λ³€ν™”ν•˜λŠ” λŒ€κ·œλͺ¨ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ΅¬μΆ•ν•˜κΈ° μœ„ν•΄

  • 페이슀뢁 πŸ‘©πŸ»β€πŸ’» 아이디어 : 'μ–΄λ–€ 데이터가 λ³€ν•  λ•Œλ§ˆλ‹€ μ–΄λ– ν•œ λ³€ν™”λ₯Ό 쀄지 κ³ λ―Όν•˜λŠ” 것이 μ•„λ‹ˆλΌ κ·Έλƒ₯ κΈ°μ‘΄ λ·°λ₯Ό λ‚ λ € 버리고 μ²˜μŒλΆ€ν„° μƒˆλ‘œ λ Œλ”λ§μ„ ν•˜μž'
    β†’ μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ΅¬μ‘°κ°€ 맀우 κ°„λ‹¨ν•˜κ³ , μž‘μ„±ν•΄μ•Όν•  μ½”λ“œ 양도 많이 쀄어듬
    β†’ ν•˜μ§€λ§Œ, μ›ΉλΈŒλΌμš°μ €μ—μ„œ 이 λ°©μ‹λŒ€λ‘œ ν•˜λ©΄ cpuμ μœ μœ¨λ„ 크게 μ¦κ°€ν•˜κ³ (DOM은 λŠλ¦¬λ‹ˆκΉŒ), λ©”λͺ¨λ¦¬λ„ 많이 μ‚¬μš©ν•  것이고, μ‚¬μš©μžκ°€ μΈν’‹λ°•μŠ€μ— ν…μŠ€νŠΈ μž…λ ₯μ‹œ κΈ°μ‘΄ λ Œλ”λ§ 된 것은 사라지고, μƒˆλ‘œ λ Œλ”λ§ν•˜λ©΄ λŠκΉ€ ν˜„μƒμ΄ λ°œμƒν•  것이닀, κ·Έλž˜μ„œ
    β†’ μ΅œλŒ€ν•œ μ„±λŠ₯을 아끼고 νŽΈμ•ˆν•œ μ‚¬μš©μžκ²½ν—˜(userExperience)을 μ œκ³΅ν•˜λ©΄μ„œ κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ κ°œλ°œν•œ 것이 : React

1. μ»΄ν¬λ„ŒνŠΈ : λ¦¬μ•‘νŠΈ ν”„λ‘œμ νŠΈμ—μ„œ νŠΉμ • 뢀뢄이 μ–΄λ–»κ²Œ 생길지 μ •ν•˜λŠ” 선언체
			μ»΄ν¬λ„ŒνŠΈλŠ” μž¬μ‚¬μš©μ΄ κ°€λŠ₯ν•œ API둜 μˆ˜λ§Žμ€ κΈ°λŠ₯듀을 λ‚΄μž₯ν•˜κ³  있으며 μ»΄ν¬λ„ŒνŠΈ ν•˜λ‚˜μ—μ„œ ν•΄λ‹Ή μ»΄ν¬λ„ŒνŠΈμ˜ μƒκΉ€μƒˆμ™€ μž‘λ™ 방식을 μ •μ˜ν•œλ‹€.
			(ν…œν”Œλ¦Ώ : λ‹€λ₯Έ ν”„λ ˆμž„μ›Œν¬μ—μ„œ μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ‹€λ£° λ•Œ μ‚¬μš©ν•˜λŠ” 것, 보톡 데이터셋이 주어지면 HTML νƒœκ·Έ ν˜•μ‹μ„ λ¬Έμžμ—΄λ‘œ λ°˜ν™˜ν•œλ‹€.)

2. λ Œλ”λ§ : μ‚¬μš©μžν™”λ©΄μ— λ·°λ₯Ό λ³΄μ—¬μ£ΌλŠ” 것
		  λ¦¬μ•‘νŠΈλΌμ΄λΈŒλŸ¬λ¦¬λŠ” λ·°λ₯Ό λ Œλ”λ§ ν•  λ–„ : 데이터가 λ³€ν•  λ•Œλ§ˆλ‹€ μƒˆλ‘­κ²Œ λ¦¬λ Œλ”λ§ν•˜λ©΄μ„œ μ„±λŠ₯을 아끼고, 졜적의 μ‚¬μš©μž κ²½ν—˜μ„ μ œκ³΅ν•œλ‹€, 이 이유λ₯Ό νŒŒμ•…ν•˜λ €λ©΄,
            β†’ (1)λ¦¬μ•‘νŠΈ μ»΄ν¬λ„ŒνŠΈκ°€ 졜초둜 μ‹€ν–‰ν•œ 'μ΄ˆκΈ°λ Œλ”λ§', 
            β†’ (2)μ»΄ν¬λ„ŒνŠΈμ˜ λ°μ΄ν„°λ³€κ²½μœΌλ‘œ λ‹€μ‹œ μ‹€ν–‰λ˜λŠ” 'λ¦¬λ Œλ”λ§'κ°œλ…μ„ μ΄ν•΄ν•΄μ•ΌνžŒλ‹€.

1. μ΄ˆκΈ°λ Œλ”λ§

  • μ΄ˆκΈ°λ Œλ”λ§
    - μ–΄λ–€ UIκ΄€λ ¨ ν”„λ ˆμž„μ›Œν¬λ‚˜ 라이브러리λ₯Ό μ‚¬μš©ν•˜λ“ μ§€ 간에 μ²˜μŒμ— μ–΄λ–»κ²Œ 보일지λ₯Ό μ •ν•˜λŠ” 것
    - λ¦¬μ•‘νŠΈμ—μ„œλŠ” 이λ₯Ό λ‹€λ£¨λŠ” renderν•¨μˆ˜κ°€ μžˆλ‹€.
  • render(μ–΄μ©Œκ³ ) {μ €μ©Œκ³ }
    - μ»΄ν¬λ„ŒνŠΈκ°€ μ–΄λ–»κ²Œ μƒκ²ΌλŠ”μ§€ μ •μ˜ν•˜λŠ” 역할을 ν•œλ‹€.
    - render()ν•¨μˆ˜λŠ” htmlν˜•μ‹μ˜ λ¬Έμžμ—΄μ„ λ°˜ν™˜ν•˜μ§€ μ•Šκ³ , λ·°κ°€ μ–΄λ–»κ²Œ 생겼고 μ–΄λ–»κ²Œ μž‘λ™ν•˜λŠ”μ§€μ— λŒ€ν•œ 정보λ₯Ό μ§€λ‹Œ 객체λ₯Ό λ°˜ν™˜ν•œλ‹€.
    - μ»΄ν¬λ„ŒνŠΈ λ‚΄λΆ€μ—λŠ” λ˜λ‹€λ₯Έ μ»΄ν¬λ„ŒνŠΈλ“€μ΄ λ“€μ–΄κ°ˆ 수 μžˆλ‹€.
    • μ΄λ•Œ, render()ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜λ©΄ : κ·Έ 내뢀에 μžˆλŠ” μ»΄ν¬λ„ŒνŠΈλ“€λ„ μž¬κ·€μ (μ–΄λ–€ 사건이 μžκΈ°μžμ‹ μ„ ν¬ν•¨ν•˜κ³  λ‹€μ‹œ μžκΈ°μžμ‹ μ„ μ‚¬μš©ν•˜μ—¬ μ •μ˜λ λ•Œλ₯Ό 말함. 즉,무언가λ₯Ό μ„€λͺ…ν•  λ•Œ μžκΈ°μžμ‹ μ„ ν¬ν•¨ν•˜λŠ” 것을 λ§ν•œλ‹€. recursive)으둜 λ Œλ”λ§ν•œλ‹€.

    • μ΄λ ‡κ²Œ μ΅œμƒμœ„ μ»΄ν¬λ„ŒνŠΈμ˜ λ Œλ”λ§ μž‘μ—… λλ‚˜λ©΄ κ°–κ³  μžˆλŠ” 정보듀을 μ‚¬μš©ν•΄μ„œ HTML markup을 λ§Œλ“€κ³ , 이λ₯Ό μš°λ¦¬κ°€ μ •ν•˜λŠ” μ‹€μ œ νŽ˜μ΄μ§€μ˜ DOMμš”μ†Œ μ•ˆμ— μ£Όμž…ν•œλ‹€.

      • μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‹€μ œ νŽ˜μ΄μ§€μ— λ Œλ”λ§ ν•˜λŠ” 것?
        • (1) λ¬Έμžμ—΄ ν˜•νƒœμ˜ HTMLμ½”λ“œλ₯Ό μƒμ„±ν•œλ’€
        • (2) νŠΉμ • DOM에 ν•΄λ‹Ή λ‚΄μš©μ„ μ£Όμž…ν•˜λ©΄ μ΄λ²€νŠΈκ°€ 적용 λœλ‹€.

      μ΄λ ‡κ²Œ : λ Œλ”λ§ β†’ HTMLλ§ˆν¬μ—…<div>...</div> --(μ£Όμž…)β†’ DOM β†’ μ‹€μ œνŽ˜μ΄μ§€

2. λ·°λ₯Ό μ—…λ°μ΄νŠΈ

  • λ·°λ₯Ό μ—…λ°μ΄νŠΈ ν•œλ‹€ = μ‘°ν™”κ³Όμ •(reconciliation)을 κ±°μΉœλ‹€
    - μ»΄ν¬λ„ŒνŠΈμ—μ„œ 데이터에 λ³€ν™”κ°€ μžˆμ„ λ•Œ, λ³΄μ΄κΈ°λ‘œλŠ” '변화에 따라 λ·°κ°€ λ³€ν˜•λ˜λŠ” 것'처럼 λ³΄μ΄μ§€λ§Œ,
    • 사싀은, μƒˆλ‘œμš΄ μš”μ†Œλ‘œ κ°ˆμ•„ 끼우기 λ•Œλ¬Έμ΄λ‹€.
    • 이 μž‘μ—…λ„ render()ν•¨μˆ˜κ°€ λ§‘μ•„μ„œ 함
    • μ»΄ν¬λ„ŒνŠΈλŠ”, 데이터 μ—…λ°μ΄νŠΈ μ‹œ λ‹¨μˆœνžˆ μ—…λ°μ΄νŠΈν•œ 값을 μˆ˜μ •ν•˜λŠ”κ²Œ μ•„λ‹ˆλΌ μƒˆλ‘œμš΄ 데이터λ₯Ό 가지고 render()ν•¨μˆ˜λ₯Ό λ˜λ‹€μ‹œ ν˜ΈμΆœν•˜λ©΄ κ·Έ 데이터λ₯Ό 가진 λ·°λ₯Ό 생성해내고, μ΄λ•Œ render()ν•¨μˆ˜κ°€ λ°˜ν™˜ν•˜λŠ” κ²°κ³Όλ₯Ό κ³§λ°”λ‘œ DOM에 λ°˜μ˜ν•˜μ§€λŠ” μ•Šκ³  이전에 render()ν•¨μˆ˜κ°€ λ§Œλ“€μ—ˆλ˜ μ»΄ν¬λ„ŒνŠΈ 정보와 ν˜„μž¬ render()ν•¨μˆ˜κ°€ λ§Œλ“  μ»΄ν¬λ„ŒνŠΈ 정보λ₯Ό λΉ„κ΅ν•œλ‹€.
    • 즉, μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μ‚¬μš©ν•˜μ—¬ 두가지 λ·°λ₯Ό μ΅œμ†Œν•œμ˜ μ—°μ‚°μœΌλ‘œ λΉ„κ΅ν•œ ν›„, λ‘˜μ˜ 차이λ₯Ό μ•Œμ•„λ‚΄ μ΅œμ†Œν•œμ˜ μ—°μ‚°μœΌλ‘œ DOM트리λ₯Ό μ—…λ°μ΄νŠΈν•˜λŠ” 것.
    • κ²°κ΅­, λ°©μ‹μžμ²΄λŠ”,
    • 루트nodeλΆ€ν„° μ‹œμž‘ν•˜μ—¬ ~ μ „μ²΄μ»΄ν¬λ„ŒνŠΈλ₯Ό μ²˜μŒλΆ€ν„° μž¬λ Œλ”λ§ν•˜λŠ” κ²ƒμ²˜λŸΌ λ³΄μ΄μ§€λ§Œ,
    • 사싀은 졜적의 μžμ›μ„ ν•˜μš©ν•˜μ—¬ 이λ₯Ό μˆ˜ν–‰ν•˜λŠ” 것.

3. Virtual DOM

  • λ¦¬μ•‘νŠΈμ˜ μ£Όμš”νŠΉμ§• 쀑 ν•˜λ‚˜ Virtual DOM을 μ‚¬μš©ν•˜λŠ” 것
  • λ¦¬μ•‘νŠΈμ—μ„œ 데이터가 λ³€ν•˜μ—¬ μ›ΉλΈŒλΌμš°μ €μ— μ‹€μ œ DOM을 μ—…λ°μ΄νŠΈν•˜λŠ” 절차
    1. 데이터 μ—…λ°μ΄νŠΈν•˜λ©΄ 전체 UIλ₯Ό Virtual DOM에 λ¦¬λ Œλ”λ§
    1. 이전 Virtual DOM에 있던 λ‚΄μš©κ³Ό ν˜„μž¬λ‚΄μš© 비ꡐ
    2. 바뀐 λΆ€λΆ„λ§Œ μ‹€μ œ DOM에 적용

4. μ‘°κ±΄λΆ€λ Œλ”λ§

const App = () => {
  const name = 'λ¦μ•‘νŠΈ';
  return (
    <div>
    	{name === 'λ¦¬μ•‘νŠΈ' ? <h1>λ¦¬μ•‘νŠΈμž…λ‹ˆλ‹€</h1> : null}
         //μœ„μ™€ λ™μΌν•˜κ³  더 짧은 μ½”λ“œ
         {name === 'λ¦¬μ•‘νŠΈ' && <h1>λ¦¬μ•‘νŠΈμž…λ‹ˆλ‹€</h1>}
    </div>
  )
}

export default App;


* λ¦¬μ•‘νŠΈμ—μ„œ falseλ₯Ό λ Œλ”λ§ν•  λ•ŒλŠ” null처럼 아무것도 λ‚˜νƒ€λ‚˜μ§€ μ•ŠλŠ”λ‹€.

5. undefined

  • λ¦¬μ•‘νŠΈμ»΄ν¬λ„ŒνŠΈμ—μ„œλŠ” ν•¨μˆ˜μ—μ„œ undefined만 λ°˜ν™˜ν•˜μ—¬ λ Œλ”λ§ν•˜λŠ” 상황을 λ§Œλ“€λ©΄ μ•ˆλœλ‹€. 예λ₯Όλ“€λ©΄,
// 이 μ½”λ“œλŠ” 였λ₯˜λœΈ App(...): Nothing was returned from render. this usually means a return
//statement is missing. Or, to render nothing, return null.
import React from 'react';

const App = () => {
  const name = undefined;
  
  return (
    name;
  )
}

export default App;

// μ–΄λ–€ 값이 undefinedμΌμˆ˜λ„ μžˆλ‹€λ©΄ ORμ—°μ‚°μž μ‚¬μš©ν•΄μ„œ κ°„λ‹¨νžˆ 였λ₯˜λ°©μ§€ γ„±γ„±
// ν•˜μ§€λ§Œ, JSXλ‚΄λΆ€μ—μ„œ undefinedλ₯Ό λ Œλ”λ§ν•˜λŠ” 것은 였λ₯˜μ•ˆλ‚¨
const name = undefined;

return (
  <div>
    {name}
  </div>
)

6. 인라인 μŠ€νƒ€μΌλ§

* λ¦¬μ•‘νŠΈμ—μ„œ λ”μš”μ†Œμ— μŠ€νƒ€μΌ μ μš©ν•  λ•ŒλŠ” λ¬Έμžμ—΄ν˜•νƒœλ‘œ λ„£λŠ”κ²Œ μ•„λ‹ˆλΌ κ°μ²΄ν˜•νƒœλ‘œ λ„£μ–΄μ£Όμ–΄μ•Ό ν•œλ‹€.
	- μΉ΄λ©œν‘œκΈ°λ²• : background-color(X) backgroundColor(O)

const App = () => {
  const name = 'react';
  const styleBabe = {
    backgroundColor: 'black',
    color: 'aqua',
    fontSize: '48px',
    fontWeight: 'bold',
    padding: 16
  }
  return (
    <div style={styleBabe}>
      {name}
    </div>
  )
}
λ˜λŠ”,
  
  <div 
	style={{
      backgroundColor: 'black',
   	  color: 'aqua',
      fontSize: '48px',
      fontWeight: 'bold',
      padding: 16
    }}
  >

    
 * JSXμ—μ„œλŠ”, class λŒ€μ‹  className
 /** */
 

7. ESLint & Prettier

  • ESLint : 문법 검사도ꡬ
  • Prettier : μ½”λ“œ μŠ€νƒ€μΌ μžλ™μ •λ¦¬ 도ꡬ (;등이 μžλ™μΆ”κ°€, ' β†’ ")

0개의 λŒ“κΈ€