[React] ๐Ÿ’ธ Money History

์ดˆ์ดยท2024๋…„ 5์›” 30์ผ

๐Ÿ’ป ํ”„๋กœ์ ํŠธ

๋ชฉ๋ก ๋ณด๊ธฐ
7/13
post-thumbnail

๐Ÿ’ธ Money History



๐Ÿ‘ฉโ€๐Ÿ’ป ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ


  • ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„ ๊ฐœ์ธํ”„๋กœ์ ํŠธ
  • ๊ฐœ๋ฐœ๊ธฐ๊ฐ„: 2024.05.22 ~ 2024.05.29 (4์ผ๊ฐ„)
  • github ์ฃผ์†Œ : github ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์‚ฌ์ดํŠธ ๋ฐฉ๋ฌธ : money history



โœ”๏ธ ํ•„์ˆ˜ ์š”๊ตฌ ์‚ฌํ•ญ


  • โœ… styled-components ๋ฅผ ์ด์šฉํ•˜์—ฌ ์Šคํƒ€์ผ๋ง ์‚ฌ์šฉํ•˜๊ธฐ
  • โœ… props drilling, context-api, redux 3๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ state ๊ด€๋ฆฌํ•˜๊ธฐ
  • โœ… react-router-dom ์„ ์ด์šฉํ•˜์—ฌ ํŽ˜์ด์ง€ ์ „ํ™˜ํ•˜๊ธฐ
  • โœ… useState, useEffect, useRef ์‚ฌ์šฉํ•˜๊ธฐ
  • โœ… uuid ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด์šฉํ•˜๊ธฐ


โ—์ด๋ ‡๊ฒŒ ๊ตฌํ˜„ํ–ˆ์–ด์š”


๐Ÿ—‚๏ธ src ํด๋” ๊ตฌ์กฐ

๐Ÿ“ฆsrc
 โ”ฃ ๐Ÿ“‚components
 โ”ƒ โ”ฃ ๐Ÿ“‚CreateHistory
 โ”ƒ โ”ฃ ๐Ÿ“‚Modal
 โ”ƒ โ”ฃ ๐Ÿ“‚MoneyHistoryList
 โ”ƒ โ”ฃ ๐Ÿ“‚MoneyItem
 โ”ƒ โ”ฃ ๐Ÿ“‚MonthItem
 โ”ƒ โ”ฃ ๐Ÿ“‚MonthList
 โ”ƒ โ”— ๐Ÿ“œHeader.jsx
 โ”ฃ ๐Ÿ“‚hooks
 โ”ƒ โ”ฃ ๐Ÿ“œuseInput.js
 โ”ƒ โ”— ๐Ÿ“œuseRefInput.js
 โ”ฃ ๐Ÿ“‚pages
 โ”ƒ โ”ฃ ๐Ÿ“‚DetailPage
 โ”ƒ โ”— ๐Ÿ“‚MainPage
 โ”ฃ ๐Ÿ“‚redux
 โ”ƒ โ”ฃ ๐Ÿ“‚reducers
 โ”ƒ โ”ƒ โ”— ๐Ÿ“œmoney.reducer.js
 โ”ƒ โ”— ๐Ÿ“‚stores
 โ”ƒ โ”ƒ โ”— ๐Ÿ“œstore.js
 โ”ฃ ๐Ÿ“‚routes
 โ”ƒ โ”— ๐Ÿ“œrouter.jsx
 โ”ฃ ๐Ÿ“‚styles
 โ”ฃ ๐Ÿ“œApp.jsx
 โ”— ๐Ÿ“œmain.jsx

๐Ÿ› ๏ธ ๊ธฐ๋Šฅ

  • ํ•„์ˆ˜์š”๊ตฌ์‚ฌํ•ญ์„ ๋งŒ์กฑ์‹œ์ผฐ์–ด์š”!
  • localStorage๋ฅผ ์ด์šฉํ•ด์„œ state๊ฐ’์„ ์ €์žฅํ–ˆ์–ด์š”.
  • useState, useRef๋ฅผ ์‚ฌ์šฉํ•ด์„œ custom Hook์„ ๋งŒ๋“ค์—ˆ์–ด์š”.
  • React Router v6๋ฅผ ์‚ฌ์šฉํ–ˆ์–ด์š”.
  • ์‚ญ์ œํ•  ๋•Œ alert๋ฅผ ๋ชจ๋‹ฌ์ฐฝ์„ ์ด์šฉํ•ด์„œ ๊ตฌํ˜„ํ–ˆ์–ด์š”.
  • ์กฐ๊ฑด๋ถ€ ์Šคํƒ€์ผ๋ง์œผ๋กœ ์›”๋ณ„ ๋ฒ„ํŠผ ์ƒ‰์„ ๋ฐ”๊ฟจ์–ด์š”.

props-drilling

  • App.jsx์— BrowserRouter, Routes, Route๋กœ routingํ–ˆ์–ด์š”.
  • MainPage์™€ DetailPage์—์„œ ๋ชจ๋“  state๋ฅผ props๋กœ ๋‚ด๋ ค์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ด€๋ฆฌํ–ˆ์–ด์š”.

context-API

  • routes ํด๋”๋ฅผ ๋งŒ๋“ค์–ด react router v6 ๋ฐฉ์‹์œผ๋กœ ๊ด€๋ฆฌํ–ˆ์–ด์š”.
  • contexts ํด๋”์—์„œ moneyContext.js๋ฅผ ๋งŒ๋“ค์–ด์„œ context๋ฅผ ๋งŒ๋“ค์—ˆ์–ด์š”.
  • app.jsx ํŒŒ์ผ์—์„œ ๋งŒ๋“  moneyContext.Provider๋กœ ๊ฐ์ŒŒ์–ด์š”.
  • state๊ฐ’์ด ํ•„์š”ํ•œ ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ useContext๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•„์š”ํ•œ state๋ฅผ ์‚ฌ์šฉํ–ˆ์–ด์š”.

redux

  • ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ react router v6 ๋ฐฉ์‹์œผ๋กœ routingํ–ˆ์–ด์š”.
  • redux-tookit์„ ์‚ฌ์šฉํ–ˆ์–ด์š”.
  • redux ํด๋”์•ˆ์— stores๋ž‘ reducers ํด๋”๋กœ store.js๋ž‘ money.reducer.jsํŒŒ์ผ๋กœ ์ „์—ญ์ƒํƒœ๊ด€๋ฆฌ๋ฅผ ํ–ˆ์–ด์š”.
  • action type์œผ๋กœ ADD_MONEY_LIST, CHANGE_MONTH, UPDATE_MONEY_LIST, DELETE_MONEY_LIST๊ฐ€ ์žˆ์–ด์š”.


๐Ÿ–ฅ๏ธ ๊ตฌํ˜„ ํ™”๋ฉด


create_money

[๐Ÿ”ผ ๋ˆ ๋‚ด์—ญ ์ƒ์„ฑ]

update_money

[๐Ÿ”ผ ์ƒ์„ธํŽ˜์ด์ง€ ๋ฐ ์ˆ˜์ • ๊ธฐ๋Šฅ]

delete_money

[๐Ÿ”ผ ๋ชจ๋‹ฌ์ฐฝ ๋ฐ ์‚ญ์ œ ๊ธฐ๋Šฅ]





๐Ÿ—จ๏ธ ํšŒ๊ณ 


props drilling๋ถ€ํ„ฐ context api, redux๊นŒ์ง€ ๋‹ค ๊ณต๋ถ€ํ•ด๋ณด๋‹ˆ ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ค‘์š”ํ•˜๊ณ  ์–ด๋–ป๊ฒŒ component๋ฅผ ๋‚˜๋ˆ ์•ผ ๋˜๋Š”์ง€ ๊ณ„์† ๊ณ ์‹ฌํ•˜๋ฉฐ ์ตœ๋Œ€ํ•œ ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง์ด ์—†๊ฒŒ ๋กœ์ง์„ ์„ธ์›Œ๋ดค๋‹ค.

ํ™•์‹คํžˆ props drilling๋ฅผ ์“ธ ๋•Œ, component๋“ค์ด ๊ทธ๋ ‡๊ฒŒ ๊นŠ๊ฒŒ ์ƒ๊ธด๊ฒƒ์ด ์•„๋‹˜์—๋„ ์–ด๋–ค ๊ฐ’์„ ๋‹ค๋ฃจ๋Š”๋ฐ์— ์ž๊พธ ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ™•์ธํ•˜๊ฒŒ ๋˜๊ณ  ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง€๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ๊ฐ€ ํž˜๋“ค์—ˆ๋‹ค. context api๋กœ ๊ด€๋ฆฌํ•˜๋‹ˆ๊นŒ ์ „์—ญ์—์„œ ๊ฐ’์„ ๊บผ๋‚ด์จ์„œ ํŽธํ•ด์กŒ์ง€๋งŒ ๋ฆฌ๋ Œ๋”๋ง์ด ๊ณ„์†๋œ๋‹ค๋Š” ๋‹จ์ ๋•Œ๋ฌธ์— app.jsx์™€ ๊ฐ™์€ ์ตœ์ƒ๋‹จ ์ปดํฌ๋„ŒํŠธ์—์„œ ๊ด€๋ฆฌํ•˜๊ธฐ๋Š” ํž˜๋“ค ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. redux๋กœ๋Š” store์—์„œ ๊ฐ’์„ ๊บผ๋‚ด์„œ ๊ด€๋ฆฌํ•˜๊ฒŒ ๋˜๋‹ˆ๊นŒ ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง์ด ํ™• ์ค„์–ด๋“ค๊ฒŒ ๋˜์—ˆ๊ณ  state๋„ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌ๋˜๋Š”์ง€ ํ•œ๋ˆˆ์— ์ž˜ ๋“ค์–ด์˜จ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

์ƒํƒœ ๊ด€๋ฆฌ์— ๋Œ€ํ•ด ์ข€ ๋” ์นœ์ˆ™ํ•ด์ง€๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ๋œ ๊ฒƒ ๊ฐ™๋‹ค.

profile
๊ฐœ๋ฐœ ์ผ๊ธฐ์žฅ

0๊ฐœ์˜ ๋Œ“๊ธ€