๐Ÿ‘ฉ‍๐Ÿ’ป/React 11

[react-router-dom] React Router v6์— ๋„์ž…๋œ ์ƒˆ๋กœ์šด Navigate API - Redirect ๋Œ€์ฒดํ•˜๊ธฐ

์ตœ๊ทผ์— react-router-dom์„ ์“ฐ๋ ค๊ณ  ๋ณด๋‹ˆ ๋ฒ„์ „ ์—…์ด ๋˜์–ด์„œ ๊ธฐ์กด์— ์•Œ๋˜ v5์˜ ์‚ฌํ•ญ๋“ค์ด ๋งŽ์ด ๋ฐ”๋€ ๊ฒƒ์„ ์•Œ์•˜๋‹ค. ๊ฐ€๋ น Switch๊ฐ€ Routes๋กœ, Redirect๊ฐ€ Navigate ๋“ฑ์œผ๋กœ ๋Œ€์ฒด๋˜๋Š” ๊ฒƒ์ด ์žˆ์—ˆ๋Š”๋ฐ, ์ข€ ๋” ํ™•์‹คํžˆ ์ดํ•ด ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝ๋˜๊ธฐ๋„ ํ–ˆ๊ณ , ๊ธฐ์กด rediect ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Navigate API๊ฐ€ ๋„์ž…๋˜๊ธฐ๋„ ํ–ˆ๋‹ค. ์•„๋ž˜๋Š” ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฝ์œผ๋ฉด์„œ ํ•„์š”ํ•œ ๋‚ด์šฉ๋งŒ ์ •๋ฆฌํ•ด๋ณด์•˜๋Š”๋ฐ, ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ด๊ณณ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ณต์‹ ๋ฌธ์„œ์—์„œ ๋งํ•˜๊ธธ, ์šฐ์„  v5์™€์˜ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ํŒจํ‚ค์ง€๋Š” ์กฐ๊ธˆ ์‹œ์ผ์ด ๊ฑธ๋ฆด ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ํ•œ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€๋˜๋Š” routes๊ฐ€ ์žˆ์„ ๊ฒƒ์ธ์ง€, ๋ณ€๊ฒฝ๋  ๊ฒƒ์ด ์žˆ์„์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ..! We recommend waiting fo..

[React.js] Re-rendering Issue & Objects are not valid as a React child

์‹œ์ž‘ํ•˜๋ฉฐ Nomad Coder ๊ฐ•์˜ ์ค‘ useTab ์ปค์Šคํ…€ ํ›… ๋งŒ๋“œ๋Š” ๊ณผ์ •์—์„œ ์ œ๋ชฉ์— ์จ๋‘” ๊ฒƒ์ฒ˜๋Ÿผ Re-rendering Issue์™€ Objects are not valid as a React ์ด์Šˆ๋ฅผ ๋งŒ๋‚ฌ๋‹ค. ํ”ํ•œ ์ด์Šˆ์ด๋ฏ€๋กœ ์ž‘์„ฑํ•˜๋ฉด์„œ ์ด๋Ÿฐ ์—๋Ÿฌ๊ฐ€ ์™œ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์จ๋‘๊ณ ์ž ํ•œ๋‹ค. ์ฝ”๋“œ Re-rendering Issue ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•  ๋•Œ์˜ ์ฝ”๋“œ๋Š” ์œ„ ๋ชจ์Šต๊ณผ ๊ฐ™๋‹ค. ์—ฌ๊ธฐ์„œ 2๋ฒˆ ์ฃผ์„ ํ‘œ์‹œ์—์„œ ์‹ค์ˆ˜๋ฅผ ํ•˜๊ฑฐ๋‚˜ ์•„๋ž˜ return ๋˜๋Š” ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ์˜ onClick ๋ถ€๋ถ„์„ ์ž˜๋ชป ์ ์„ ๊ฒฝ์šฐ Re-Rendering์ด ๊ณ„์† ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. useTabs ํ›…์€ ๊ฐ์ฒด ํ•˜๋‚˜๋ฅผ return ํ•ด์ฃผ๊ณ , App() ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” ์ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. ๋งจ ์ฒ˜์Œ UseTabs๋Š” useState๋ฅผ ํ†ตํ•ด currentI..

[React.js Hooks] React Hook useEffect has a missing dependency: 'dispatch'. Either include it or remove the dependency array react-hooks/exhaustive-deps issue

๋ฌธ์ œ ์ƒํ™ฉ useEffect๋ฅผ ์“ฐ๋ฉด์„œ ์ž์ฃผ ๋งŒ๋‚˜๋Š” ์—๋Ÿฌ ํ•ธ๋“ค๋ง์„ ํ•ด๋ณด์ž. ๋ฌธ์ œ ์›์ธ ๋ฐ ํ•ด๊ฒฐ useEffect๋Š” ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ์—์„œ componentDidMount()์™€ componentDidUpdate() ๋ผ์ดํ”„ ์‚ฌ์ดํด ๋ฉ”์†Œ๋“œ ๋‘ ๊ฐœ๋ฅผ ํ•ฉ์นœ ์—ญํ• ์„ ํ•œ๋‹ค๊ณ  ๋ฐฐ์› ๋‹ค. ๋”ฐ๋ผ์„œ, useEffect ํ•จ์ˆ˜์˜ ๋‘ ๋ฒˆ์งธ ์ธ์ž์— ๋นˆ ๋ฐฐ์—ด์„ ๋„ฃ๊ฑฐ๋‚˜, ์—…๋ฐ์ดํŠธ ํ•˜๊ณ ์ž ํ•˜๋Š” state๋ฅผ ๋„ฃ์–ด์ฃผ์–ด ๋ Œ๋”๋ง์˜ ํšŸ์ˆ˜๋ฅผ ์ œํ•œํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š”๋ฐ, ์œ„ ์—๋Ÿฌ๋Š” ํ•ด๋‹น state๊ฐ€ ๋น ์กŒ๊ฑฐ๋‚˜, ์ž˜๋ชป ๋“ค์–ด๊ฐ”๊ฑฐ๋‚˜ ํ•ด์„œ ๋‚˜์˜ค๋Š” ์—๋Ÿฌ์ด๋‹ค. ๋ฌธ์ œ์˜ ์›์ธ์ด ๋œ ์ฝ”๋“œ๋Š” App.js์™€ Snackbar.js ์ปดํฌ๋„ŒํŠธ์—์„œ์˜€๋‹ค. App.js์—์„œ๋Š” Redux๋ฅผ ํ†ตํ•ด ๋ฐ˜์‘ํ˜• ์ปดํฌ๋„ŒํŠธ ๋นŒ๋”ฉ์„ ์œ„ํ•ด size๋ฅผ store์— ๋“ฑ๋กํ•ด์ฃผ๊ธฐ ์œ„ํ•ด ๋ฆฌํŒฉํ† ๋ง์„ ํ•˜๋‹ค๊ฐ€ ์ƒ๊ฒผ๋‹ค. func..

[react] redux๋กœ ์ƒํƒœ ๊ด€๋ฆฌํ•˜๊ธฐ #์‹œ์ž‘ํ•˜๋ฉฐ 2

์‹œ์ž‘ํ•˜๋ฉฐ 1ํŽธ์—์„œ ๋‹ค๋ฃจ์—ˆ๋˜ ๊ธ€์—์„œ๋Š” redux-actions๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, redux์™€ react-redux ๋ชจ๋“ˆ๋กœ๋„ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์„๊นŒ ์‹ถ์—ˆ๋‹ค. ํŒจํ„ด ์—ญ์‹œ ์ข€ ๋” ์ง๊ด€์ ์œผ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์„œ ์ฆ๊ฒจ๋ณด๋Š” ์œ ํŠœ๋ฒ„์˜ Redux ๊ฐ•์˜๋ฅผ ํ•œ ๋ฒˆ ๋“ค์–ด๋ดค๋‹ค. ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์„ฑ store โ””modules โ”” index.js โ”” test.js โ””config.js โ””index.js ๊ธฐ์กด์—๋Š” ์œ„ ๊ฐ™์€ ๊ตฌ์„ฑ์ด์—ˆ๋‹ค. ์ด๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ actions์™€ reducers๋กœ ๊ตฌ๋ถ„ํ–ˆ๋‹ค. ๊ธฐ๋ณธ ์„ค์ • 1 step reducer ์ƒ์„ฑ reducers ํด๋” ๋‚ด์— counter์™€ ๋กœ๊ทธ์ธ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” isLoggedIn reducer๋ฅผ ๋งŒ๋“ค์–ด๋ณด๊ธฐ๋กœ ํ•œ๋‹ค. // src/reducers/counter.js const counterReduce..

[react] redux๋กœ ์ƒํƒœ ๊ด€๋ฆฌํ•˜๊ธฐ #์‹œ์ž‘ํ•˜๋ฉฐ

์‹œ์ž‘ํ•˜๋ฉฐ App์ด ์ ์  ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋ฉด์„œ ์ƒํƒœ ๊ด€๋ฆฌํ•  ํ•„์š”๋ฅผ ๊ณ„์† ๋Š๋ผ๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, ์ด๋ฒˆ์—์•ผ ๋„์ž…ํ–ˆ๋‹ค. ํ•„์š”ํ•œ ๋ชจ๋“ˆ์„ ์„ค์น˜ํ•˜๊ณ , ๊ฐ„๋‹จํ•˜๊ฒŒ +/- ๋ฒ„ํŠผ์„ ํ†ตํ•ด ์นด์šดํŠธ๋˜๋Š” ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์–ด๋ณด๋ฉด์„œ Redux์— ์ ‘๊ทผํ•ด๋ดค๋‹ค. ํ•„์š” ๋ชจ๋“ˆ ๋‹ค์šด๋กœ๋“œ yarn add react-redux redux redux-actions yarn์„ ํ†ตํ•ด ์œ„ dependencies๋ฅผ ๋ฐ›์•˜๋‹ค. ํด๋” ๊ตฌ์„ฑ ์ตœ์ข… ํด๋” ๊ตฌ์„ฑ์€ ์‚ฌ์ง„์ฒ˜๋Ÿผ ๋˜์–ด ์žˆ๋‹ค. src/store ๋‚ด config.js, index.js ํŒŒ์ผ์„ ๊ฐ€์ง€๋ฉฐ, modules ํด๋”๋ฅผ ๋”ฐ๋กœ ๋‘์—ˆ๋‹ค. store 1. config.js ํŒŒ์ผ ์ƒ์„ฑ ํ•ด๋‹น ํŒŒ์ผ์€ ์—ฌ๋Ÿฌ store๋ฅผ ๋ชจ์•„ ์™ธ๋ถ€ ์ปดํฌ๋„ŒํŠธ์™€ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค. store๋Š” state๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ผ์ข…์˜ ๋ณด๊ด€์ฒ˜. // src/config.js..

[React.js Hooks] useState, useEffect, useReducer

useState ๊ธฐ๋ณธ Hook์— ์†ํ•˜๋Š” useState. ์ƒํƒœ ์œ ์ง€ ๊ฐ’๊ณผ ๊ทธ ๊ฐ’์„ ๊ฐฑ์‹ ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋น„๊ตฌ์กฐํ™” ํ• ๋‹น์„ ํ†ตํ•ด ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ฒ˜์Œ ๋ Œ๋”๋ง์ด ๋œ ์‹œ์ ์— ๋ฐ˜ํ™˜๋œ state ๊ฐ’์€ useState์ด ๋‘ ๋ฒˆ์งธ ์ธ์ž ๊ฐ’๊ณผ ๊ฐ™๋‹ค. ์ฝ”๋“œ ์ƒ๋‹จ์— useState๋ฅผ importํ•ด์ค€ ๋’ค, ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์— const \[value, setValue\] = useState(0); ๋กœ value์˜ ์ดˆ๊ธฐ ์ƒํƒœ๊ฐ’์„ useState์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ†ตํ•ด 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•ด์ค€๋‹ค. ์ดํ›„, +1, -1์ด๋ผ๋Š” ๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ๋Š” setValue ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๊ธฐ์กด value์— 1์„ ๋”ํ•œ ๊ฐ’์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ, ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์ค€๋‹ค. setValue ํ•จ์ˆ˜๋Š” ์ƒˆ๋กœ์šด state ๊ฐ’์„ ์ธ์ž๋กœ ๋ฐ›์•„ ์ปดํฌ๋„ŒํŠธ Re-rendering์„ ์‹œํ‚จ๋‹ค. ์ดํ›„ ๋ Œ..

[React.js๋กœ ๋งŒ๋“œ๋Š” Tech Blog] #5 ์–ธ์–ด ์„ค์ •์„ ์œ„ํ•œ react-i18next ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉํ•˜๊ธฐ/๊ตญ์ œํ™” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(i18n)

2021/02/21 - [๐Ÿ‘ฉ‍๐Ÿ’ป/React.js] - [React.js๋กœ ๋งŒ๋“œ๋Š” Tech Blog] #4 Window.scrollY/window.pageYOffset 2021/02/16 - [๐Ÿ‘ฉ‍๐Ÿ’ป/React.js] - [React.js๋กœ ๋งŒ๋“œ๋Š” Tech Blog] #3 master ๋ธŒ๋žœ์น˜๋กœ ํ†ตํ•ฉํ•˜๊ธฐ/github pages์— ์žฌ๋ฐฐํฌํ•˜๊ธฐ 2021/02/13 - [๐Ÿ‘ฉ‍๐Ÿ’ป/React.js] - [React.js๋กœ ๋งŒ๋“œ๋Š” Tech Blog] #2 react router ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ™œ์šฉ 2021/02/09 - [๐Ÿ‘ฉ‍๐Ÿ’ป/React.js] - [React.js๋กœ ๋งŒ๋“œ๋Š” Tech Blog] #1 Figma ํ”„๋กœํ† ํƒ€์ดํ•‘/๊ฐœ๋ฐœํ™˜๊ฒฝ ์„ธํŒ…/Grommet UI Library/useState/Responsive Hea..

[React.js๋กœ ๋งŒ๋“œ๋Š” Tech Blog] #4 Window.scrollY/window.pageYOffset

2021/02/09 - [๐Ÿ‘ฉ‍๐Ÿ’ป/React.js] - [React.js๋กœ ๋งŒ๋“œ๋Š” Tech Blog] #1 Figma ํ”„๋กœํ† ํƒ€์ดํ•‘/๊ฐœ๋ฐœํ™˜๊ฒฝ ์„ธํŒ…/Grommet UI Library/useState/Responsive Header ๋งŒ๋“ค๊ธฐ 2021/02/13 - [๐Ÿ‘ฉ‍๐Ÿ’ป/React.js] - [React.js๋กœ ๋งŒ๋“œ๋Š” Tech Blog] #2 react router ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ™œ์šฉ 2021/02/16 - [๐Ÿ‘ฉ‍๐Ÿ’ป/React.js] - [React.js๋กœ ๋งŒ๋“œ๋Š” Tech Blog] #3 master ๋ธŒ๋žœ์น˜๋กœ ํ†ตํ•ฉํ•˜๊ธฐ/github pages์— ์žฌ๋ฐฐํฌํ•˜๊ธฐ ์ด์Šˆ ์ž‘์—…๋ฌผ์˜ Preview ์ด๋ฏธ์ง€๋ฅผ ํด๋ฆญํ•˜๋ฉด ํ™•๋Œ€๋˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ๋Š”๋ฐ, ์ด๋ฏธ์ง€๋ฅผ ๋‹ซ๊ณ  ์›๋ž˜ ํŽ˜์ด์ง€๋กœ ๋Œ์•„์˜ค๋ฉด, ๋ธŒ๋ผ์šฐ์ € ์ƒ๋‹จ์œผ๋กœ ์˜ฌ๋ผ๊ฐ€๋Š” ์ด์Šˆ๊ฐ€ ์žˆ์—ˆ..

[React.js๋กœ ๋งŒ๋“œ๋Š” Tech Blog] #3 master ๋ธŒ๋žœ์น˜๋กœ ํ†ตํ•ฉํ•˜๊ธฐ/github pages์— ์žฌ๋ฐฐํฌํ•˜๊ธฐ

2021/02/09 - [๐Ÿ‘ฉ‍๐Ÿ’ป/React.js] - [React.js๋กœ ๋งŒ๋“œ๋Š” Tech Blog] #1 Figma ํ”„๋กœํ† ํƒ€์ดํ•‘/๊ฐœ๋ฐœํ™˜๊ฒฝ ์„ธํŒ…/Grommet UI Library/useState/Responsive Header ๋งŒ๋“ค๊ธฐ 2021/02/13 - [๐Ÿ‘ฉ‍๐Ÿ’ป/React.js] - [React.js๋กœ ๋งŒ๋“œ๋Š” Tech Blog] #2 react router ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ™œ์šฉ Github Pages์— ๋ฐฐํฌ๋œ ๊ธฐ์กด portfolio๋ฅผ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•ด์„œ second ๋ผ๋Š” ์ด๋ฆ„์˜ ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ž‘์—…์ด ์–ด๋Š ์ •๋„ ๋๋‚˜์„œ second ๋ธŒ๋žœ์น˜๋ฅผ master ๋ธŒ๋žœ์น˜๋กœ ์•„์˜ˆ ๋ฎ์–ด์“ฐ๊ธฐ๋ฅผ ์ง„ํ–‰ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. git checkout second git merge -s ours master git checkout ..

[React.js๋กœ ๋งŒ๋“œ๋Š” Tech Blog] #2 react router ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ™œ์šฉ

2021/02/09 - [๐Ÿ‘ฉ‍๐Ÿ’ป/React.js] - [React.js๋กœ ๋งŒ๋“œ๋Š” Tech Blog] #1 Figma ํ”„๋กœํ† ํƒ€์ดํ•‘/๊ฐœ๋ฐœํ™˜๊ฒฝ ์„ธํŒ…/Grommet UI Library/useState/Responsive Header ๋งŒ๋“ค๊ธฐ [React.js๋กœ ๋งŒ๋“œ๋Š” Tech Blog] #1 Figma ํ”„๋กœํ† ํƒ€์ดํ•‘/๊ฐœ๋ฐœํ™˜๊ฒฝ ์„ธํŒ…/Grommet UI Library/useState/Responsive Header ํ…Œํฌ ๋ธ”๋กœ๊ทธ ๊ธฐํš ๊ธฐ์กด์— GIthub Pages๋กœ ๋ฐฐํฌํ•œ github.io ๋ธ”๋กœ๊ทธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธด ํ–ˆ์ง€๋งŒ, ๊ธ‰ํ•  ๋•Œ ํ…œํ”Œ๋ฆฟ ๊ฐ€์ง€๊ณ  ์™€์„œ ๊ณ ์ณ ์“ด ๊ฒŒ ๋‹ค๋ผ ๋ ˆ์ด์•„์›ƒ์— ์ œ์•ฝ์ด ์ปค ์•„์˜ˆ ์ƒˆ๋กœ ์ œ์ž‘ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ์ œ์ž‘ํ•˜๋ฉฐ ์—ฌ uiyoji-journal.tistory.com ๋žœ๋”ฉ ํŽ˜์ด์ง€๋กœ๋งŒ ๊พธ๋ช„๋‹ค๋ฉด ๋„ค๋น„๊ฒŒ์ด์…˜์€ ๋” ์† ..