Curl Up Black Cat


😎 μ„œλ‘ 

μ˜€λŠ˜μ€ λ¦¬μ•‘νŠΈμ—μ„œ λ™μ  λΌμš°νŒ…μ„ μ‚¬μš©ν•˜μ—¬ νŽ˜μ΄μ§€ λͺ¨λ“œλ₯Ό μ–΄λ–»κ²Œ ν™œμš©ν•˜λŠ”μ§€ μž‘μ„±ν•©λ‹ˆλ‹€. κ²Œμ‹œνŒ 화면을 λ§Œλ“€μ–΄ λ³΄λ©΄μ„œ 등둝, μˆ˜μ •, μƒμ„Έμ˜ 화면을 단 ν•˜λ‚˜μ˜ νŽ˜μ΄μ§€μ—μ„œ κ΄€λ¦¬ν•˜λŠ” 것이 λͺ©ν‘œμ˜€μŠ΅λ‹ˆλ‹€. 이λ₯Ό λ¦¬μ•‘νŠΈλ‘œ κ°œλ°œν•˜λ©΄μ„œ νŽ˜μ΄μ§€ κ°„μ˜ 이동 및 λ°μ΄ν„°μ˜ ν™œμš©μ„ μ–΄λ–»κ²Œ ν•΄μ•Ό 효과적으둜 κ΅¬ν˜„ν•  수 μžˆμ„κΉŒ? κ³ λ―Όν•˜λ‹€κ°€ 동적 λΌμš°νŒ… ν™œμš©μ„ μ•Œκ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.


πŸ˜ƒ νŽ˜μ΄μ§€ λͺ¨λ“œμ˜ μ •μ˜

λ¨Όμ €, AppTypes νŒŒμΌμ—μ„œ νŽ˜μ΄μ§€μ˜ λͺ¨λ“œλ₯Ό κ΄€λ¦¬ν•©λ‹ˆλ‹€.

const AppTypes = {
  PageMode: {
    view: 'view',
    add: 'add',
    edit: 'edit',
  },
  ...
}

νŽ˜μ΄μ§€μ˜ λͺ¨λ“œλŠ” view, add, edit μ„Έ κ°€μ§€λ‘œ κ΅¬λΆ„λ©λ‹ˆλ‹€. μœ„ μ½”λ“œμ²˜λŸΌ App μ—μ„œ ν™œμš©λœλŠ 각 λͺ¨λ“œ νƒ€μž…μ„ λ³„λ„μ˜ 파일둜 λΆ„λ¦¬ν•˜μ—¬ κ΄€λ¦¬ν•˜λ©΄ ν”„λ‘œμ νŠΈμ˜ ꡬ쑰가 λ”μš± λͺ…확해지고 μœ μ§€ λ³΄μˆ˜κ°€ μ‰¬μ›Œμ§‘λ‹ˆλ‹€.


🌟 λ¦¬μ•‘νŠΈ λΌμš°ν„°μ˜ ν™œμš©

λ¦¬μ•‘νŠΈμ—μ„œ νŽ˜μ΄μ§€κ°„μ˜ 이동을 κ΄€λ¦¬ν•˜λŠ” κ°€μž₯ 효과적인 방법 쀑 ν•˜λ‚˜λŠ” λ¦¬μ•‘νŠΈ λΌμš°ν„°λ₯Ό ν™œμš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 특히 동적 λΌμš°νŒ…μ€ λ™μΌν•œ UI ꡬ쑰λ₯Ό κ°€μ§€λ©΄μ„œ λ‹€μ–‘ν•œ 데이터λ₯Ό λ³΄μ—¬μ£ΌλŠ” νŽ˜μ΄μ§€λ₯Ό κ΅¬ν˜„ν•  λ•Œ 맀우 μœ μš©ν•©λ‹ˆλ‹€. νŽ˜μ΄μ§€ λͺ¨λ“œλ₯Ό ν™œμš©ν•΄ λΌμš°ν„°μ—μ„œλŠ” λ‹€μŒκ³Ό 같이 κ²½λ‘œμ™€ μ»΄ν¬λ„ŒνŠΈλ₯Ό μ—°κ²°ν•΄ μ£Όμ—ˆλŠ”λ°μš”..

import { Navigate, Route, Routes } from 'react-router-dom'

const App = () => {
  return (
    <Routes>
      <Route path="/board/list" element={<LayoutWithComponent layout={EmptyLayout} component={Board} />} />
      <Route path="/board/view/:id" element={<LayoutWithComponent layout={EmptyLayout} component={BoardView} />} />
      <Route path="/board/:mode" element={<LayoutWithComponent layout={EmptyLayout} component={BoardView} />} />
      ...
    </Routes>
  )
}

/board/:mode κ²½λ‘œμ™€ 같이 λ™μ  라우트 λ°©μ‹μœΌλ‘œ κ²Œμ‹œνŒμ˜ λ‹€μ–‘ν•œ λͺ¨λ“œλ₯Ό 효율적으둜 μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

μ΄λ ‡κ²Œ μž¬μ‚¬μš©μ„±μ„ 높이면 개발 κ³Όμ •μ—μ„œμ˜ λ³΅μž‘λ„λ₯Ό μ€„μΌμˆ˜ μžˆμŠ΅λ‹ˆλ‹€.

 

동적 λΌμš°νŒ…μœΌλ‘œ νŽ˜μ΄μ§€λ₯Ό λ„˜κΈ°λŠ” 이벀트 ν•Έλ“€λŸ¬ μ½”λ“œ μ˜ˆμ‹œμž…λ‹ˆλ‹€.

const handleAddClick = useCallback(() => {
  navigateTo(`/board/${AppTypes.PageMode.add}`)
}, [navigateTo])

const handleRowClick = useCallback((id) => {
  navigateTo(`/board/view/${id}`)
}, [navigateTo])

λ‹€μ–‘ν•œ 상황에 따라 μœ μ—°ν•˜κ²Œ URL을 κ΅¬μ„±ν•˜μ—¬ ν•΄λ‹Ή URL 에 λ§žλŠ” νŽ˜μ΄μ§€λ‘œ λΌμš°νŒ… ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


πŸ“‘ νŽ˜μ΄μ§€ λͺ¨λ“œ 관리

View μ—μ„œλŠ” κ²Œμ‹œκΈ€μ˜ 상세 λ‚΄μš©μ„ 보여주며, 각각의 λͺ¨λ“œμ— 따라 μ μ ˆν•œ μ•‘μ…˜ λ²„νŠΌλ“€μ„ μ œκ³΅ν•©λ‹ˆλ‹€. useParamsλ₯Ό μ‚¬μš©ν•˜μ—¬ λΌμš°νŠΈμ—μ„œ ν•„μš”ν•œ λ§€κ°œλ³€μˆ˜λ₯Ό 가져와 μƒνƒœλ₯Ό μ§€μ •ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

const BorderView = () => {
  const { mode, id } = useParams() // mode: AppTypes.PageMode
  const [currentMode, setCurrentMode] = useState(mode || AppTypes.PageMode.view)
...
}

μ΄λ ‡κ²Œ ν•  경우 쑰건뢀 λ Œλ”λ§μ„ ν™œμš©ν•˜μ—¬ ν˜„μž¬ λͺ¨λ“œμ— 따라 λ‹€λ₯Έ UI μš”μ†Œλ₯Ό 보여쀄 수 μžˆμŠ΅λ‹ˆλ‹€.

{currentMode === AppTypes.PageMode.view && (
  <>
    <button type="button" className="list-btn" onClick={handleListClick}>λͺ©λ‘μœΌλ‘œ</button>
    <button type="button" className="edit-btn" onClick={handleEditClick}>νŽΈμ§‘</button>
  </>
)}

{currentMode !== AppTypes.PageMode.view && (
  ...
)}

이 외에도 각 λͺ¨λ“œμ— 따라 λ‹€λ₯Έ 이벀트 ν•Έλ“€λŸ¬λ₯Ό μ„€μ •ν•˜κ±°λ‚˜ 데이터λ₯Ό μš”μ²­ν•˜λŠ” λ“±μ˜ λ™μž‘μ„ λΆ„κΈ°μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

const onSubmit = useCallback(async (data) => {
  const payload = {
    ...data
  }
  
  try {
    if (currentMode === AppTypes.PageMode.add) {
      await BoardService.create(payload)
      navigateTo('/board')
    }
  
    if (currentMode === AppTypes.PageMode.edit) {
      await BoardService.update(id, payload)
      navigateBack()
    }
  } catch (err) {
    handleError(err.response)
  }
}, [currentMode, id, navigateTo, navigateBack, handleError])

πŸ”„ νŽ˜μ΄μ§€ λͺ¨λ“œ λ³€κ²½ν•˜κΈ°

useState 에 μ„ μ–Έν•œ setCurrentMode ν•¨μˆ˜λ₯Ό 톡해 νŽ˜μ΄μ§€μ˜ λ™μž‘ λͺ¨λ“œλ₯Ό λ³€κ²½ν•˜μ—¬ μ΄λ₯Ό 톡해 μ‚¬μš©μžμ˜ μ•‘μ…˜(예: νŽΈμ§‘ λ²„νŠΌ 클릭)에 따라 λ™μž‘ λͺ¨λ“œλ₯Ό λ³€κ²½ν•˜κ³ , 그에 λ”°λ₯Έ UIλ₯Ό κ°±μ‹ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

const handleEditClick = useCallback((e) => {
  e.preventDefault()
  setCurrentMode(AppTypes.PageMode.edit)
}, [])

🎬 결둠

λ¦¬μ—‘νŠΈ λΌμš°ν„°μ˜ 동적 λΌμš°νŒ…μ„ ν™œμš©ν•˜λ©΄, μ‚¬μš©μžμ˜ μš”μ²­μ— 따라 νŽ˜μ΄μ§€μ˜ λ‚΄μš©κ³Ό μƒνƒœλ₯Ό μœ μ—°ν•˜κ²Œ λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€. νŽ˜μ΄μ§€ λͺ¨λ“œμ˜ 관리와 λΌμš°νŒ…μ„ μ΅œμ ν™”ν•˜λŠ” 방법을 μ‚΄νŽ΄λ΄€λŠ”λ°, λ¦¬μ—‘νŠΈ ν”„λ‘œμ νŠΈμ—μ„œ 이 기법을 μ μš©ν•˜λ©΄ μ‚¬μš©μž κ²½ν—˜μ€ λ¬Όλ‘ , 개발자의 μž‘μ—… νš¨μœ¨λ„ μƒλ‹Ήνžˆ 증진될 것이라 μƒκ°ν•©λ‹ˆλ‹€. πŸ™‚

+ Recent posts