React์™€ Redux๋ฅผ ์ด์šฉํ•œ ํˆฌ๋‘๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋ฉฐ
728x90

๋‘ ๋ฒˆ์งธ ํˆฌ๋‘ ๋ฆฌ์ŠคํŠธ

react-router-dom, styled-components์™€ redux์— ๋Œ€ํ•ด ์ข€ ๋” ๊ณต๋ถ€ํ•œ ํ›„์— ๊ธฐ์ดˆ ํˆฌ๋‘ ๋ฆฌ์ŠคํŠธ๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œํ•ด์„œ ๋‹ค์‹œ ํ•œ๋ฒˆ ๋งŒ๋“ค์–ด๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์กŒ๋‹ค. ํˆฌ๋‘ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค๋ฉฐ UI/UX ์ ์œผ๋กœ๋‚˜, ๊ธฐ์ˆ ์ ์œผ๋กœ ๊ณ ๋ฏผํ–ˆ๋˜ ๋ถ€๋ถ„๋“ค๊ณผ ๊นจ๋‹ฌ์€ ์ .. ๊ฐ™์€ ๊ฒƒ๋“ค์„ ํšŒ๊ณ ํ•ด๋ณด๋ ค ํ•œ๋‹ค.

์™„์„ฑ๋œ ํˆฌ๋‘๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐฐํฌํ•œ ๋งํฌ๋Š” ์•„๋ž˜!

https://todolist-redux-theta.vercel.app/

 

React App

 

todolist-redux-theta.vercel.app

 

 

 

UI/UX

์ง€๋‚œ๋ฒˆ์— ๋งŒ๋“ค ๋•Œ๋Š” ๊ฝค ์ž์œ ๋ถ„๋ฐฉํ•˜๊ฒŒ ๋งŒ๋“ค์–ด๋ดค์œผ๋‹ˆ ์ด๋ฒˆ์—๋Š” ์š”๊ตฌ๋˜๋Š” ํ‹€์„ ์œ ์ง€ํ•˜๋˜ ์‚ฌ์šฉ์ž์˜ ํŽธ์˜๋ฅผ ์ƒ๊ฐํ•ด์„œ ๋ ˆ์ด์•„์›ƒ์„ ์งœ๋ณด์•˜๋‹ค.

ํˆฌ๋‘ ํ•˜๋‹จ๋ถ€์˜ ๋ฒ„ํŠผ์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋”ฐ์กŒ์„ ๋•Œ, ์œ ์ € ์ž…์žฅ์—์„œ๋Š” '์™„๋ฃŒ'๊ฐ€ ๊ฐ€์žฅ ์ˆœ์œ„๊ฐ€ ๋†’๋‹ค๊ณ  ์ƒ๊ฐํ•˜์—ฌ ๋ฐฐ๊ฒฝ์ƒ‰์„ ์ฃผ์—ˆ๊ณ ,

์ œ๋ชฉ์ด๋‚˜ ๋‚ด์šฉ ๋ถ€๋ถ„์ด ๋„ˆ๋ฌด ๊ธธ์–ด ํ˜๋Ÿฌ๋„˜์น˜๋Š” ๊ฒฝ์šฐ ๋ง์ค„์ž„ํ‘œ๋ฅผ ๋„ฃ์–ด์ฃผ๋„๋ก ํ–ˆ๋‹ค.

 

 

Styled-components

styled-components์˜ props๋ฅผ ์ด์šฉํ•œ ์กฐ๊ฑด๋ถ€ ์Šคํƒ€์ผ๋ง์„ ์ฒ˜์Œ ์‹œ๋„ํ•ด๋ณด์•˜๊ณ , createGlobalStyle ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ „์—ญ ์Šคํƒ€์ผ์„ ์ ์šฉํ•ด๋ณด์•˜๋‹ค. ํ”„๋กœ์ ํŠธ ๋•Œ๋„ ์ถฉ๋ถ„ํžˆ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. ๐Ÿ™Œ

 

 

 

map ๋ฉ”์„œ๋“œ์— ๊ณ ์œ  key๊ฐ’ ๋งคํ•‘

index๋‚˜ todo์˜ length๋ฅผ key๋กœ ๋งคํ•‘ํ–ˆ์„ ๋•Œ, ํˆฌ๋‘๋ฅผ ์‚ญ์ œ๋˜๊ณ  ๋‹ค์‹œ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ key๊ฐ€ ๊ผฌ์ผ ์ˆ˜ ์žˆ๋‹ค.
๊ณ ์œ  key๋ฅผ ๋งคํ•‘ํ•ด์ฃผ๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์ง€๋งŒ, ์ด๋ฒˆ์— uuid๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์•Œ๊ฒŒ ๋˜์–ด ์‚ฌ์šฉํ•ด ๋ณด์•˜๋‹ค.

 

 

map ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์•„๋ž˜์™€ ๊ฐ™์ด ํ‚ค๊ฐ’์„ ๋„˜๊ฒจ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

uuid๋Š” ์œ„์™€ ๊ฐ™์ด 8-4-4-4-12 ํ˜•์‹์œผ๋กœ ํ‘œํ˜„๋˜๋Š” ์œ ์ผ ์‹๋ณ„์ž์ด๋‹ค.

์ด๋ฅผ ์ด์šฉํ•ด์„œ ํˆฌ๋‘๊ฐ€ ์‚ญ์ œ๋˜์–ด๋„ key์— ์˜ํ–ฅ์ด ๊ฐ€์ง€ ์•Š๋„๋ก ํ–ˆ๋‹ค.

 

 

 

Button ์ปดํฌ๋„ŒํŠธ์˜ ์กฐ๊ฑด๋ถ€ ์Šคํƒ€์ผ๋ง๊ณผ ์‹คํ–‰ ํ•จ์ˆ˜ ํ• ๋‹นํ•˜๊ธฐ

์‚ญ์ œ, ์™„๋ฃŒ, ์ทจ์†Œ ๋“ฑ์— ์“ฐ์ธ Button ์ปดํฌ๋„ŒํŠธ๋Š” ๊ฐ๊ฐ์˜ ํˆฌ๋‘์— ํ•ด๋‹นํ•˜๋Š” TodoItem ์ปดํฌ๋„ŒํŠธ๋งŒํผ ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ๋‹ค.

Button ์ปดํฌ๋„ŒํŠธ์—์„œ ๊ณ ๋ฏผํ–ˆ๋˜ ๊ฒƒ์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๋‹ค. ์กฐ๊ฑด๋ถ€ ์Šคํƒ€์ผ๋ง๊ณผ ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ํ•จ์ˆ˜ ์‹คํ–‰ํ•˜๊ธฐ.

์ด๋ฅผ ์œ„ํ•ด์„œ props๋กœ type์ด๋ผ๋Š” ๊ฐ’์„ ์ „๋‹ฌํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

 

 

์•„๋ž˜๋Š” props์˜ ๊ฐ’์„ ์กฐ๊ฑด๋ถ€ ์Šคํƒ€์ผ๋ง์— ์ด์šฉํ•œ ์ฝ”๋“œ ์ผ๋ถ€.

์กฐ๊ฑด๋ถ€ ์Šคํƒ€์ผ๋ง์„ ์œ„ํ•ด ๊ฐ๊ฐ ํด๋ž˜์Šค๋ฅผ ๋„ฃ์–ด์ค„ ์ˆ˜๋„ ์žˆ๊ฒ ์ง€๋งŒ, styled-components์˜ ํŠน์„ฑ์„ ์‚ด๋ ค props๋ฅผ ์ด์šฉํ–ˆ๋‹ค.
props๋กœ ๋„˜๊ธฐ๋Š” ๊ฐ’ ์ค‘ type์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋ฐฐ๊ฒฝ์ƒ‰, ํ…Œ๋‘๋ฆฌ ์ƒ‰, ํฐํŠธ ์ƒ‰์ƒ ๋“ฑ์„ ์Šคํƒ€์ผ๋งํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ๋‹ค.

 

 

๋‘ ๋ฒˆ์งธ๋กœ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ.

ํƒ€์ž…์— ๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•˜๋„๋ก ํ–ˆ๋‹ค.

์ด ๋ถ€๋ถ„์„ ์ง„ํ–‰ํ•˜๋ฉฐ ์‚ฝ์งˆ์„ ์ข€ ํ–ˆ๋Š”๋ฐ, ๊ด€๋ จ๋œ ๋‚ด์šฉ์€ ์•„๋ž˜์—์„œ ๋” ์ž์„ธํžˆ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๐Ÿ˜‡

 

https://i-ten.tistory.com/242

 

React onClick์— ํ•จ์ˆ˜ ๋„˜๊ธธ ๋•Œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ฒ˜๋ฆฌ

Today, What I learned? redux์™€ styled-components, react-router-dom์„ ์ด์šฉํ•ด์„œ ์ข€ ๋” ์—…๊ทธ๋ ˆ์ด๋“œ๋œ ํˆฌ๋‘ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ์ค‘!.. ์ด์ „๋ณด๋‹ค ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ข€ ๋” ์„ธ๋ถ„ํ™” ํ•˜๋‹ค๋ณด๋‹ˆ ๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ๋„ ๋ถ„๋ฆฌํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

i-ten.tistory.com

 

 

 

 

 

์ด๋ฒˆ ํˆฌ๋‘ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค๋ฉด์„œ ์šฐ์„  state, props์™€ ์ข€ ๋” ๊ฐ€๊นŒ์›Œ์ง€๊ฒŒ ๋œ ๊ฒƒ ๊ฐ™๋‹ค.

styled-components ๋ง›๋ณด๊ธฐ๋งŒ ํ–ˆ์—ˆ๋Š”๋ฐ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•ด๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๊ณ , ๋˜ ๋ฆฌ๋•์Šค๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ฒƒ๋„ ์กฐ๊ธˆ์€ ์ต์ˆ™ํ•ด์ง€๋Š” ์‹œ๊ฐ„์ด์—ˆ๋‹ค. ๐Ÿ‘

 

 

728x90