๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’๊ณต๋ถ€/ํ”„๋ฆฌ์˜จ๋ณด๋”ฉ์ฝ”์Šค

[ํ”„๋ฆฌ์˜จ๋ณด๋”ฉ์ฝ”์Šค] 2์ฃผ์ฐจ -๊ณผ์ œ3(2)

by rindev 2021. 8. 8.

โœ์•Œ๊ฒŒ๋œ ๊ฒƒ๊ณผ ๋Š๋‚€์ 

 

๐Ÿ”ฅ๊ทธ๋ž˜์„œ ํ•ด๋ณด๋Š” ์ •๋ฆฌ

1. forwardRef

ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์— ์žˆ๋Š” ์—˜๋ฆฌ๋จผํŠธ์— ์ ‘๊ทผํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

์ด๋ฒˆ์— ํšŒ์›๊ฐ€์ž…์„ ๊ตฌํ˜„ํ•˜๋ฉด์„œ, ์ œ๋Œ€๋กœ ์ž…๋ ฅ ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์— toast๋ฅผ ๋„์šฐ๋ฉด์„œ ํ•ด๋‹น input์— focus๋ฅผ ์ฃผ๋Š” ์ž‘์—…์„ ํ•˜๋Š”๋ฐ, ์ฃผ์†Œ ์ž…๋ ฅํ•˜๋Š” ์นธ์ด ์ปดํฌ๋„ŒํŠธ๋กœ ๋“ค์–ด์™€์žˆ์–ด์„œ... focus๋ฅผ ์–ด๋–ป๊ฒŒ ์ฃผ์ฃ ? ~๊ณ ๋ฏผ์˜ ์‹œ์ž‘~

(1) ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ Address๋ฅผ ์“ธ ๋•Œ ref๋ฅผ ๋„˜๊ฒจ์ค€๋‹ค

(2) ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ forwardRef๋ฅผ importํ•˜๊ณ , ref๋ฅผ prop์œผ๋กœ ๋ฐ›์•„์˜จ๋‹ค

(3) ๊ทธ๋ฆฌ๊ณ  ์ƒ์œ„์ปดํฌ๋„ŒํŠธ์—์„œ ์กฐ์ž‘ํ•˜๊ณ  ์‹ถ์€ ๋ถ€๋ถ„์— ref๋ฅผ ์ฃผ๊ณ ,

๋งจ ๋ฐ‘์ค„์— export ํ•  ๋•Œ export default forwardRef(์ปดํฌ๋„ŒํŠธ๋ช…) ์œผ๋กœ ์ ์–ด์ค€๋‹ค!

์•„๋‹ˆ๋ฉด const Address = forwardRef( (props, ref) => {... ์ด๋Ÿฐ ์‹์œผ๋กœ ์œ„์—์„œ ๊ฐ์‹ธ์ค˜๋„ ๋œ๋‹ค.

 

 

2. styled component๋ฅผ importํ•  ๋•Œ ๋‚ด๊ฐ€ ํ•œ ์‹ค์ˆ˜

A์—์„œ ์ƒ์„ฑ๋œ ์Šคํƒ€์ผ๋“œ ์ปดํฌ๋„ŒํŠธ๋ฅผ B์—์„œ importํ–ˆ๋‹ค

B์—์„œ ๊ทธ๊ฑธ ์กฐ๊ธˆ ๋ณ€๊ฒฝํ•ด์„œ export ํ•ด์„œ C์—์„œ ๋ถ€๋ฅด๋ ค ํ–ˆ๋‹ค → ์˜ค๋ฅ˜๊ฐ€ ๋‚จ!

์™œ ์•ˆ๋˜๋Š”๊ฑธ๊นŒ ํ•˜์•„์•ˆ์ฐธ ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€ ํŒ€์›๋ถ„๊ป˜ ์—ฌ์ญค๋ดค๋”๋‹ˆ ์•„๋ฌด๋ž˜๋„ Circular dependency ์˜ค๋ฅ˜์ธ ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ํ•˜์…จ๋‹ค...

์•ˆ๋˜๋Š”๊ตฌ๋‚˜... ๋ญ”๊ฐ€ ๋  ๊ฒƒ ๊ฐ™์•˜๋Š”๋ฐ(ใ…‹ใ…‹) ๊ฒ€์ƒ‰ํ•ด๋ณด๋‹ˆ ์ €๋ ‡๊ฒŒ import ํ•˜๋Š”๊ฒŒ ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๋ผ๊ณ  ํ•˜๋„ค์š”..

์•„๋ฌดํŠผ ๊ทธ๋ž˜์„œ A → B, A → C๋กœ ๋”ฐ๋กœ import๋ฅผ ํ•ด์„œ ์ด์ œ๋Š” ์ž˜ ์ž‘๋™ํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค..

 

 

3. ์ƒ์ˆ˜๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค๋Š” ๊ฒƒ์€

Object.freeze๋Š” ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

์ง€๊ธˆ๊นŒ์ง€๋Š”(๋ญ ์˜ค๋ž˜๋œ๊ฒƒ๋„ ์•„๋‹ˆ์ง€๋งŒ) const๋ฐ–์— ๋ชฐ๋ž๋Š”๋ฐ, const์™€์˜ ์ฐจ์ด์ ์€

์ด๋ฏธ์ง€ ์ถœ์ฒ˜ : https://opentutorials.org/module/4075/24884

o1 = o2๋ฅผ ํ•˜๋ฉด o1์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’์ด o2๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’์ด ๋˜๋Š”๋ฐ, const๋Š” ๊ทธ๊ฑธ ๋ฐฉ์ง€ํ•ด์ค€๋‹ค.

๊ทผ๋ฐ ๋งŒ์•ฝ o1.name='lee' ๋ผ๊ณ  ๊ฐ’์„ ๋ฐ”๊พธ๋ ค๊ณ  ํ•˜๋ฉด, ๊ทธ๊ฑธ ๋ง‰์•„์ฃผ๋Š”๊ฑด freeze์ด๋‹ค.

 

์š”์•ฝ : const๋Š” ๋‹ค๋ฅธ ๊ฐ’์„ ๋ชป ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•จ, freeze๋Š” ๋‚ด์šฉ๋ฌผ ์ž์ฒด๋ฅผ ๋ชป ๋ฐ”๊พธ๊ฒŒ ํ•จ

2๊ฐœ ๋‹ค ์“ฐ๋ฉด ์™„์ „ ํŠผํŠผํ•˜๊ฒŒ ์ง€ํ‚ค๋Š” ๊ฑฐ๊ฒ ๋„ค์šฉ

 

 

4. ๋‚˜๋ฌด๋ง๊ณ  ์ˆฒ์„๋ณด๋Š” ์ฝ”๋“œ๋ฅผ ์งœ๊ณ ์‹ถ๋‹ค 

4-1. ์ด๋ฉ”์ผ ์ค‘๋ณต ๊ฒ€์‚ฌ๋ฅผ ์งœ๋ฉด์„œ

์ด๋ฉ”์ผ ์ค‘๋ณต ๊ฒ€์‚ฌ๋ฅผ ํ•˜๊ณ , ์ค‘๋ณต๋œ ์ด๋ฉ”์ผ์ž…๋‹ˆ๋‹ค! ๋ผ๊ณ  toast๋ฅผ ๋„์› ๋‹ค.

๊ทผ๋ฐ ํ† ์ŠคํŠธ๋งŒ ๋„์šธ๊ฒŒ ์•„๋‹ˆ๋ผ ์•„์˜ˆ ๊ฐ’์ด ์ €์žฅ์ด ์•ˆ๋˜๋„๋ก ๋ง‰์•˜๋”๋ผ๋ฉด? ํ›จ์”ฌ ์ข‹์€ ์ฝ”๋“œ๊ฐ€ ๋์„ ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค...

ํŒ€์›๋‹˜๊ป˜์„œ ์ค‘๋ณต๊ฒ€์‚ฌํ•˜๋Š” ํ•จ์ˆ˜ ์•ˆ์— flag ๊ฐ’์„ ์ƒ์„ฑํ•ด์„œ ํ†ต๊ณผํ•˜๋ฉด true๋ฅผ ๋ฆฌํ„ดํ•˜๋„๋ก ์ˆ˜์ •ํ•ด์ฃผ์…จ๊ณ , ๊ทธ ํ”Œ๋ž˜๊ทธ๋Š” submit์ด ๋ˆŒ๋ ธ์„ ๋•Œ ๋ชจ๋“  ๊ฐ’์„ ๊ฒ€์‚ฌํ•˜๋Š” ํ•จ์ˆ˜์—์„œ ๋ถˆ๋ ค์„œ ์œ ์šฉํ•˜๊ฒŒ ์“ฐ์˜€๋‹ค. ์ค‘๋ณต์„ ๊ฒ€์‚ฌํ•ด์•ผ์ง€! ํ•ด์„œ ์ง„์งœ ์ค‘๋ณต๋งŒ ๊ฒ€์‚ฌํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ.... ๊ทธ ๊ฐ’์ด ์–ด๋–ป๊ฒŒ ํ˜๋Ÿฌ๊ฐ€๋Š”์ง€ ์ชผ๋”๋งŒ ๋” ์ƒ๊ฐํ•ด์„œ ๋‚ด๋‹ค๋ณด๋Š” ์ฝ”๋”ฉ์„ ํ•˜์ž...๐Ÿ˜ญ ์šฐ๋Š”์ค‘

 

4-2. ์ „์ฒด์ ์œผ๋กœ ํ†ต์ผ๊ฐ ์žˆ๋Š” ์ฝ”๋“œ

์ด๊ฑด ๊ฐœ์ธ์˜ (ํ˜น์€ ํŒ€์˜) ์ทจํ–ฅ์ผ ๊ฒƒ ๊ฐ™๊ธฐ๋„ ํ•˜์ง€๋งŒ... ๊ทธ๋ ‡์ง€๋งŒ... ์ฝ”๋“œ๋ฅผ ๋ณผ ๋•Œ ์ „์ฒด์ ์ธ ๋Š๋‚Œ์ด ์ผ์ •ํ•ด ๋ณด์ด๋Š” ๊ฒŒ ์ข‹์œผ๋‹ˆ๊นŒ์š”๐Ÿฅบ ํ”„๋ฆฌ์˜จ๋ณด๋”ฉ ํ•˜๋ฉด์„œ ์ •๋ง ์ข‹์€์ ์ด ๋‚˜๋ณด๋‹ค ์ž˜ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์˜ ์ฝ”๋“œ๋ฅผ ๋‹ค์–‘ํ•˜๊ฒŒ ๋งŽ์ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ ๊ฐ™๋‹ค! 

๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ์ฝ”๋“œ๋ผ๋„ ํ˜•์‹์„ ์ฃผ๋ณ€ ์ฝ”๋“œ์™€(??) ๋น„์Šทํ•˜๊ฒŒ ์งœ๋ฉด ๋‚˜์ค‘์— ๋‹ค์‹œ ๋ณผ ๋•Œ ์•„๋‹ˆ๋ฉด ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋ณผ ๋•Œ ์ข€ ๋‚ซ์ง€์•Š์„๊นŒ ํ•˜๋Š” ์ƒ๊ฐ!! 

 

 

5. netlify์—์„œ ๋ฐฐํฌํ•˜๊ธฐ (treat warning as errors)

However, one concern is that some libraries may now interpret what were previously just warnings as hard errors that will halt a build. The intention is that developers should not ship potentially broken configurations, but the downside is that builds that successfully completed previously may fail after this change. If you believe that your build is breaking after this change, you can disable this behavior by unsetting the CI variable in your build. 

2020๋…„์—... ์ด๋Ÿฐ ์—…๋ฐ์ดํŠธ๋ฅผ ํ–ˆ๋‹ค๊ณ  ํ•œ๋‹ค.... (์ถœ์ฒ˜ : ์—ฌ๊ธฐ)

CI=false npm run build ๋˜๋Š” CI= npm run build ๋กœ build๋ฅผ ํ•˜๋ฉด warning์€ error๋กœ ์ทจ๊ธ‰ํ•˜์ง€ ์•Š๊ณ  ์ •์ƒ์œผ๋กœ ๋นŒ๋“œ๊ฐ€ ๋œ๋‹ค! 

 

๐Ÿš€๊ณผ์ œ ํ›„๊ธฐ

7๋ช…์ด ํ•˜๋Š” ๊ณผ์ œ! ๊ทผ๋ฐ ์ •๋ง ๋‹ค๋“ค ๋„ˆ๋ฌด๋„ˆ๋ฌด ์ ๊ทน์ ์œผ๋กœ ์ฐธ์—ฌํ•ด์ฃผ์…”์„œ ํ•™๊ต๋‹ค๋‹ˆ๋ฉด์„œ ๊ฒช์—ˆ๋˜ ๋ถ„๋…ธ์˜ ํŒ€ํ”Œ๋“ค(^^)์ด ์‹น ์žŠํ˜€์ง€๋Š” ๊ธฐ๋ถ„์ด์—ˆ๋‹ค ๊ทธ๋ฆฌ๊ณ  ๋‚ด๊ฐ€ 1์ธ๋ถ„์„ ํ–ˆ๋Š”๊ฐ€์— ๋Œ€ํ•œ ํฐ ์˜๋ฌธ์ด ๋“ค์—ˆ๋‹ค........ 

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

๊ทธ๋ฆฌ๊ณ  ์‚ฌ์‹ค ์œ ์„ ์ƒ์œผ๋กœ ํ†ตํ™”๋‚˜ ๋Œ€ํ™”ํ•˜๋Š”๊ฑฐ๋ณด๋‹ค ํ…์ŠคํŠธ๋ฅผ ์„ ํ˜ธํ•˜๋Š” ํŽธ์ธ๋ฐ, ๋งค์ผ ๋ชจ์—ฌ์„œ ์Šคํฌ๋Ÿผ ํ•˜๋‹ค๋ณด๋‹ˆ ์ต์ˆ™ํ•ด์กŒ๋‹ค!! ์šฐ๋ฆฌ์กฐ ์‚ฌ๋žŒ๋“ค ๋‹ค๋“ค ๋„˜ ์ฐฉํ•ด... ์ฒœ์‚ฌ๋ผ๊ณ ... ๊ทธ์ € ์ง์‚ฌ๋ž‘์ค‘

๋ฒŒ์จ 2์ฃผ๊ฐ€ ์ง€๋‚˜๊ฐ”๋„ค ์‹œ๊ฐ„ ๋„ˆ๋ฌด ์ž˜๊ฐ„๋‹ค.. 8์ฃผ๊ฐ€ ์ง€๋‚˜๊ณ  ์ด๊ฑธ ๋‹ค ๋๋ƒˆ์„ ๋•Œ๋Š” ๋‚˜๋„ ์–ด๋””๊ฐ€์„œ ์•„ ๋‚˜ ๋ฆฌ์•กํŠธ ์ซŒ ๋ฐฐ์›Ÿ์ง€ใ…‹ ํ•˜๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์„ ์ •๋„๊ฐ€ ๋ผ์žˆ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค๐Ÿ˜ญ 

 

 

๐Ÿ‘€์ฐธ๊ณ (โ™ก)

๋”๋ณด๊ธฐ

https://stackoverflow.com/questions/62372017/circular-dependency-for-extracted-styles-with-styled-components

 

Circular dependency for extracted styles with styled-components

I’m fairly new to styled-components and trying to extract / refactor styles to separate files. I have problem with circular dependency - probably because of lacks of experience in styled-components...

stackoverflow.com

https://opentutorials.org/module/4075/24884

 

๊ฐ์ฒด๋ฅผ ๋ถˆ๋ณ€ํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ (Object.freeze) - JavaScript Immutability

์ˆ˜์—…์†Œ๊ฐœ ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์ธ Object.freeze๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.  ๊ฐ•์˜1 ์ฝ”๋“œ var o1 = {name:'kim', score:[1,2]} Object.freeze(o1); Object.freeze(o1.score); o1.name = 'lee'; o1.city = 'seoul'; o1.score.push(3); consol

opentutorials.org

 

https://stackoverflow.com/questions/62415804/how-to-prevent-netlify-from-treating-warnings-as-errors-because-process-env-ci/62490508#62490508

 

How to prevent Netlify from treating warnings as errors because process.env.CI = true?

Deploying new projects started failing on Netlify. Checking the logs I see something that was not in the logs on previous successful deploys: Treating warnings as errors because process.env.CI = t...

stackoverflow.com

https://answers.netlify.com/t/netlify-not-building-command-failed-with-exit-code-1-npm-run-build/16999

 

Netlify not building - Command failed with exit code 1: npm run build

Hey, I can’t figure out why my app wont build on netlify. I tried building it locally it works, was checking for same file names, lowercase names that are different, tried removing json files and do a clean npm install, none helped. And it’s something

answers.netlify.com

๋Œ“๊ธ€