[Wecode] Westagram project

link717ยท2020๋…„ 10์›” 25์ผ
0

Wecode

๋ชฉ๋ก ๋ณด๊ธฐ
5/9
post-thumbnail

๐Ÿ‘Š๐Ÿป Westagram ํ”„๋กœ์ ํŠธ ํ›„๊ธฐ

[Project]

  • ๊ธฐ๊ฐ„: 2020.10.07 ~ 2020.10.14

  • ์‚ฌ์šฉ ์Šคํƒ:
    . React
    . React-Router-Dom
    . JavaScript
    . SASS
    . html/css

  • ๋ชฉํ‘œ:
    . JavaScript/html/css๋กœ ๊ตฌํ˜„ํ–ˆ๋˜ ์ฝ”๋“œ๋ฅผ react๋กœ code restructuring ํ•  ์ˆ˜ ์žˆ๋‹ค.
    . back-end์™€ ์˜์‚ฌ์†Œํ†ตํ•˜์—ฌ ํšŒ์›๊ฐ€์ž…/๋กœ๊ทธ์ธ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ“‘ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€

๐Ÿ”‘ ๊ธฐ์–ตํ•˜๊ณ  ์‹ถ์€ ์ฝ”๋“œ

๊ธฐ์กด์— JavaScript๋กœ ์ฝ”๋“œ ์ž‘์„ฑํ–ˆ์„ ๋•Œ๋Š” getElementby๋ฅผ ํ™œ์šฉํ•ด์„œ DOM์— ์ง์ ‘ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ react๋ฅผ ์จ๋ณด๋‹ˆ ๋ชจ๋“  ๊ฒƒ์€ state๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์ง์ ‘ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์„ ์ง€์–‘ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚ด ์ƒ๊ฐ์—๋Š” ์œ ํšจํ•˜์ง€ ์•Š์€ input ๊ฐ’์ด state๋ฅผ ๊ณ„์† set ํ•œ๋‹ค๋Š” ๊ฒŒ ์ฒ˜์Œ์—๋Š” ๋น„ํšจ์œจ์ ์ด๋ผ ์ƒ๊ฐํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋ฐ›๊ธฐ ์ „์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด state ์™ธ์—์„œ ๊ด€๋ฆฌ๋˜๋Š” ๊ฒƒ์ด ๋งŽ์•˜๊ณ  ref๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ dom์— ์ง์ ‘ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์ด ๋งŽ์•˜๋‹ค.๐Ÿ˜… ํ•˜์ง€๋งŒ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ํ›„์—๋Š” ref ์‚ฌ์šฉ์„ ์ž์ œํ•˜๊ณ  ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ํ™œ์šฉํ•˜์—ฌ input์˜ value๋ฅผ ์ทจํ•˜์—ฌ ์‚ฌ์šฉํ–ˆ๋‹ค.๐Ÿ˜

  • input tag์˜ value ์–ป๋Š” ๋ฐฉ๋ฒ•!
    1) ref: ์ ‘๊ทผ์ด ํ•„์š”ํ•œ tag์— ref ๊ผฌ๋ฆฌํ‘œ๋ฅผ ๋ถ™์—ฌ์„œ DOM์— ์ง์ ‘ ์ ‘๊ทผ
    2) name: e.target.value๋ฅผ state์— ์ €์žฅํ•˜๊ณ  attribute๋ฅผ ์ด์šฉํ•˜์—ฌ value๋ฅผ get! - event์— ์ฒ˜๋ฆฌํ•  input tag๊ฐ€ 2๊ฐœ ์ด์ƒ์ผ ๊ฒฝ์šฐ
    3) value: e.target.value๋ฅผ state์— ์ €์žฅํ•˜๊ณ  attribute๋ฅผ ์ด์šฉํ•˜์—ฌ state์— update๋œ ๊ฐ’์„ ์ง€์ •ํ•˜์—ฌ ํ™”๋ฉด์— ๋ณด์—ฌ์คŒ(์ผ์ข…์˜ ์ฐฉ์‹œ) - event์— ์ฒ˜๋ฆฌํ•  input tag๊ฐ€ 1๊ฐœ์ผ ๊ฒฝ์šฐ

    ์‚ฌ์‹ค! ์•„์ง์€ ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž๋กœ์„œ ๋ฐฉ๋ฒ•์˜ ์ฐจ์ด๊ฐ€ ๋ฌด์—‡์ธ์ง€๋ฅผ ์•„์ง๋„ ์™„๋ฒฝํ•˜๊ฒŒ ์•Œ์ง€๋Š” ๋ชปํ•˜์ง€๋งŒ... ์œ ์ถ”๋ฅผ ํ•ด๋ณด๋ฉด state์˜ ์ •์˜๋งŒ์œผ๋กœ๋„ component ์‚ฌ์ด์˜ ์œ ๊ธฐ์ ์ธ ์—ฐ๊ฒฐ๊ณ ๋ฆฌ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ ์ธก๋ฉด์—์„œ ํฐ ์žฅ์ ์ด ์žˆ๊ณ , state๊ฐ€ ๋ณ€ํ™”ํ•  ๋•Œ๋งŒ component๊ฐ€ rendering์ด ๋˜๊ฒŒ ํ•˜์—ฌ ์›นํŽ˜์ด์ง€์—์„œ ์ผ์–ด๋‚˜๋Š” ๋ชจ๋“  ๋ณ€ํ™”๋ฅผ ๊ฐœ๋ฐœ์ž์˜ control ์•ˆ์— ๋‘๊ธฐ ์œ„ํ•จ์ด ์•„๋‹๊นŒ ์‹ถ๋‹ค.


๐Ÿ“‘ ๋ฉ”์ธ ํŽ˜์ด์ง€

๐Ÿ”‘ ๊ธฐ์–ตํ•˜๊ณ  ์‹ถ์€ ์ฝ”๋“œ

์—ฌ๊ธฐ๋„ ref์™€์˜ ์‹ธ์›€์ด๋‹ค... ์‹ธ์šฐ์ž ref! ์œ„์˜ ์ฝ”๋“œ๋Š” nav bar์— ์žˆ๋Š” avatar๋ฅผ click ํ–ˆ์„ ๋•Œ tool box๊ฐ€ drop down ๋˜๊ณ , avatar + ์ „์ฒดํ™”๋ฉด์„ ํด๋ฆญํ–ˆ์„ ๋•Œ๋Š” tool box๊ฐ€ ๋‹ซํžˆ๋Š” ํšจ๊ณผ๋ฅผ ์ค„ ๋•Œ ์‚ฌ์šฉํ–ˆ๋‹ค. avatar ์œ„์น˜๋ฅผ ํŠน์ •์ง“๊ธฐ ์œ„ํ•ด์„œ ๋‚˜๋Š” ref๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ๋ณด๋ฉด ref๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ํฌ๊ฒŒ 3๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ

1) Managing focus, text selection, or media playback.
2) Triggering imperative animations.
3) Integrating with third-party DOM libraries.

๋‚˜๋Š” ์—ฌ๊ธฐ์„œ ์ฒซ๋ฒˆ์งธ ๊ฒฝ์šฐ์— ํ•ด๋‹นํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ref๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ์ง€๋งŒ ref๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ๊ณ ๋ฏผํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ref๋ฅผ ์“ฐ์ง€ ์•Š๊ณ  tool box์˜ state๋ฅผ ๊ด€๋ฆฌ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ์—†๋Š”๊ฑธ๊นŒ?? ๐Ÿค”

๊ทธ ๋•Œ, ๋‚˜์™€ ๊ฐ™์€ ๊ณ ๋ฏผ์„ ํ–ˆ๋˜ ๋™๊ธฐ๊ฐ€ ํžŒํŠธ๋ฅผ ์ฃผ์—ˆ๊ณ  img tag์— tab index attribute๋ฅผ ๋ถ€์—ฌํ•˜๊ณ  Click๊ณผ onBlur๋ฅผ ์ ์ ˆํžˆ ํ™œ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์˜€๋‹ค.

โŽtab index๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด focus ๊ธฐ๋Šฅ์ด ์—†๋Š” ์ผ๋ฐ˜ tag์—๋„ focus์™€ ๊ด€๋ จ๋œ event๋ฅผ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

์™œ? ๊ทธ๋ ‡๊ฒŒ... ์“ฐ๋Š”๊ฑฐ์ฃ ?

์ฝ”๋“œ๋ฅผ ์Šค์Šค๋กœ ์งœ๋‹ค ๋ณด๋ฉด ์ž์ฃผ ํŠ€์–ด๋‚˜์˜ค๋Š” ๋ฌผ์Œํ‘œ ์‚ด์ธ๋งˆ(?) ๋ณธ๋Šฅ์ด ์žˆ๋‹ค. ๊ทธ๋Ÿด ๋•Œ๋งˆ๋‹ค ์—ด์‹ฌํžˆ ๊ตฌ๊ธ€๋งํ•˜๊ณ  ๊ณต์‹๋ฌธ์„œ๋ฅผ ์ฝ์–ด๋ณด๋ฉฐ ์ดํ•ดํ•˜๋ ค๋Š” ๊ณผ์ •์ด ์žˆ์ง€๋งŒ ์ผ๋‹จ ๋‚ด๊ฐ€ ๊ฐ€์ง„ ์ง€์‹์ˆ˜์ค€์ด ์•„์ง ์–•์•„์„œ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ 100% ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์„ ์ˆ˜๋ฐ–์— ์—†๋‹ค. (๋ฐ›์•„๋“ค์—ฌ...) ์–ด๋–ค ์ง€์‹์ด๋“  100% ์ดํ•ด๋ผ๋Š” ๊ฒƒ์€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋‹จ ์“ฐ๋‹ค ๋ณด๋ฉด ๋‚˜์ค‘์— ์ž์—ฐ์Šค๋ ˆ ์ต์ˆ™ํ•ด์ง€๊ณ  ์ดํ•ด๊ฐ€ ๋˜๊ฒ ์ง€๋งŒ ๊ธฐ๊ณ„์ ์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ์ฝ”๋“œ๋Š” ๋‚˜์ค‘์— ๋‹ค์‹œ ์“ฐ๋ ค๊ณ  ํ•ด๋„ ๊ธฐ์–ต์— ๋‚จ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ๊ท ํ˜•์„ ์žก์œผ๋ ค๊ณ  ๋…ธ๋ ฅ์„ ๋งŽ์ด ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

๋™๊ธฐ์‚ฌ๋ž‘ ๋‚˜๋ผ์‚ฌ๋ž‘

์ด๋Ÿฐ ๋ฌผ์Œํ‘œ์˜ ๋Šช์— ๋น ์งˆ ๋•Œ ๋จผ์ € ๋‹ค๊ฐ€์™€์„œ ๊ฐ™์ด ๊ณ ๋ฏผํ•ด์ฃผ๊ณ  ๋˜ ๊ฐ™์€ ๊ณ ๋ฏผ์„ ํ–ˆ๋ดค๋˜ ์ž…์žฅ์—์„œ ๊ฐ™์€ ๋ˆˆ๋†’์ด๋กœ ์•Œ๋ ค์ค€ ์šฐ๋ฆฌ ๋™๊ธฐ๋ถ„๋“ค๊ป˜ ๋„ˆ๋ฌด ๊ณ ๋ง™๋‹ค๊ณ  ๋งํ•˜๊ณ  ์‹ถ๋‹ค.(โ—'โ—ก'โ—) ๊ทธ๋ฆฌ๊ณ  ์•ž์œผ๋กœ ๋ณธ๊ฒฉ์ ์ธ ํŒ€ ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ์„ํ…๋ฐ ํŒ€ ํ”„๋กœ์ ํŠธ์˜ 8ํ• ์€ ์†Œํ†ต๊ณผ ๋ฐฐ๋ ค์—์„œ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ๋‚ด ๊ฐœ์ธ์ ์ธ ์‹ค๋ ฅํ–ฅ์ƒ๋„ ๊ธฐ๋Œ€๋˜์ง€๋งŒ ์„œ๋กœ ๋‹ค๋ฅธ ๊ธธ์„ ๊ฑธ์–ด์˜จ ๋ฉ‹์ง„ ๋™๊ธฐ๋ถ„๋“ค๊ณผ ๋งŒ๋“ค์–ด ๋‚ผ ์•„๋ฆ„๋‹ค์šด ์ž‘ํ’ˆ(?)์ด ๋„ˆ๋ฌด๋‚˜๋„ ๊ธฐ๋Œ€๋œ๋‹ค! ํ•จ๊ป˜ํ•ด์„œ ์ข‹์€ 13๊ธฐ ์ž˜ ๋ถ€ํƒํ•ฉ๋‹ˆ๋‹ค!ใƒพ(โ€ขฯ‰โ€ข`)o

profile
Turtle Never stop

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