Redux๋ฅผ ์ฌ์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ์ ์ญ์ผ๋ก ๊ด๋ฆฌํ ํ์๊ฐ ์์ ๋, useNavigate๋ก ๋ผ์ฐํ
ํ๋ฉด์ ํจ๊ป ํด๋น ํ์ด์ง๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋ค. useNavigate์ useLocation์ด๋ฉด ๊ฐ๋ฅํ๋ค! 1. useNavigate() useNavigate๋ฅผ ์ฌ์ฉํด์ ์ด๋ ๊ฒฝ๋ก๋ก state๊ฐ ์ ๋ฌํ๊ธฐ const navigte() = useNavigate(); navigate("์ด๋ํ ๊ฒฝ๋ก", state:{ "์ ๋ฌํ๊ณ ์ ํ๋ ๋ฐ์ดํฐ" }); 2. useLocation() useLocation์ ์จ์ props ๋ฐ๊ธฐ const { state } = useLocation();
๋ฆฌ์กํธ
๋งจ๋ ์ ํด์ ธ์๋ ํ
ํ๋ฆฟ์ ์ด์ฉํ ๊ธฐ๋ฅ ๊ฐ๋ฐ๋งํ๋ค๊ฐ ๋ชจ์ฒ๋ผ ์๋ก์ด UI๋ฅผ ์ง์ผํ๋ ์ผ์ด ์๊ฒผ๋ค. ๋ฐ๋ฐฅ์ ๊น์๋ณด์๋ฉด ใ
ใ
... ์ฒ์๋ถํฐ ๋น๋ํ ํ๋ก์ ํธ๊ฐ ์๋๋ผ ์ค๊ฐ์ ๋ผ์ฌ๋ ํ๋ก์ ํธ์๊ธฐ์ ์ฝ๋๋ฅผ ์ฝ์ ๋๋ถํฐ ๋ฒ๋ฒ
์ด๊ธด ํ๋ค. ์ ์ด์ ๋ฐ๋ฐฅ์ ๊น๋ฆผ. ๋ด๊ฐ ํด์ผํ ๋ชฉ๋ก 1. swiper ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด๋ค. 2. navigator ๋ฒํผ์ ๋์ค๊ฒํ๊ณ ์ฒซ ์ฌ๋ผ์ด๋์์๋ ์ผ์ชฝ ๋ฒํผ์ด ์ฌ๋ผ์ง๊ฒ ๋ง์ง๋ง ์ฌ๋ผ์ด๋๋ ์ค๋ฅธ์ชฝ ๋ฒํผ์ด ์ฌ๋ผ์ง๊ฒํ๋ค. 3. ์ฌ๋ผ์ด๋๋ ๋ง์ฐ์ค ๋๋๊ทธ๋ก๋ ๊ฐ๋ฅํ๊ฒํ๋ค. Code import React, { useState } from 'react'; import { Swiper, SwiperSlide } from 'swiper/react'; const Projects = () => { const [sw..
์ด๋ฏธ์ง๋ฅผ ๋ค๋ฃจ๋ ์์
์ ์งํํ๊ฒ ๋์๋๋ฐ, ๊ธฐ์กด์ ํด์ค๋ ๊ฒ๊ณผ ๋ฌ๋ฆฌ ์ด๋ฒ์๋ ์ฌ๋ฌ ์ด๋ฏธ์ง๋ฅผ ๋ฐฐ์ด ํํ๋ก ๋ณด๋ด์ url๋ฅผ ๋ฐ์์์ ๋ค์ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ๋ฐ์ดํฐ์ ํจ๊ป create ํน์ update๋ฅผ ํด์ค์ผํ๋ค. ๊ทธ๋ฐ๋ฐ, ๋ง์ฝ์ ๊ธฐ์กด์ url์ด ์๋ ์ํ๋ฉด pass๋ฅผ ํ๊ณ ์๋ก ๋ฃ์ ์ด๋ฏธ์ง๋ง url์ ๋ค์ ๋ฐ์์์ update๋ฅผ ํด์ค์ผํ๋ ๊ฒ์์ ๋ฌธ์ ๊ฐ ์๊ฒผ๋ค. api๋ฅผ ํธ์ถํ๊ธฐ ์ ์ console.log๋ก body๋ฅผ ์ฐ์ผ๋ฉด ๋ถ๋ช
ํ ์
๋ฐ์ดํธ ๋ ์ด๋ฏธ์ง url์ด ์ฐํ๋๋ฐ, ๋ง์ api๋ฅผ ํธ์ถํ๋ฉด payload์ ์
๋ฐ์ดํธ๋ ๊ฐ์ด ์ ์ฐํ๋ ๊ฒ์ด๋ค!!!!!!!! ๋ฐ๋์ ์ ๋ถ์ก๊ณ ๋์ด์ ธ์๋๋ฐ ๋ฏธ์น ์ง๊ฒฝ... async - await๋ฅผ ์จ์ ๋น๋๊ธฐ์ฒ๋ฆฌ๋ฅผ ํด์คฌ๋๋ฐ ๋ญ๊ฐ ๋ถ๋ง์ด๋?! ๋ญ๊ฐ ์ ๋ชป ๋๊ฑด๋ฐ?! .... ๋ฌธ์ ..
React-Query ๋น๋๊ธฐ ํต์ fetch, axios ๋ฑ์ ์ฌ์ฉํ๋ฉด์ ์๋ฒ ์ํ ๊ด๋ฆฌ ๋ฐ ๋น๋๊ธฐ ๋ก์ง์ ์ฝ๊ฒ ๋ค๋ฃจ๊ฒ ํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋น๋๊ธฐ ํต์ ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ช ๊ฐ์ง ์์ง๋ง react-query๋ฅผ ์ฌ์ฉํ๋ฉด ์์ฒญ์ ๋ณด๋ด๋ ์ฝ๋ฐฑํจ์๋ฅผ ์ ๋ฌํ๊ธฐ๋ง ํ๋ค๋ฉด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ๊ณตํด์ฃผ๋ ๋ง์ ๊ธฐ๋ฅ๋ค(์บ์ฑ, ๊ฐ ์
๋ฐ์ดํธ, ์๋ฌ ํธ๋ค๋ง ๋ฑ)์ ์ด์ฉํ ์ ์์ผ๋ฉฐ ์ฝ๋๋ ๋งค์ฐ ๊ฐ๋จํด์ง๋๋ค. ์ฌ์ฉํ๋ ์ด์ ์๋ฒ๋ก๋ถํฐ ๊ฐ์ ๊ฐ์ ธ์ค๊ฑฐ๋ ์
๋ฐ์ดํธ๋ฅผ ํด์ผํ๋ ๋ก์ง์ store์์ ๊ฐ๋ฐํด์ผํ๋ ๊ฒฝ์ฐ๋ค์ด ๋ง์ต๋๋ค. store๋ client์์ state๋ฅผ ์ ์งํ๋ฉด์ ๋ด๋ถ์ client data ์ server data ๊ฐ ๊ณต์กด์ ํ๊ฒ ๋๋ ์๊ฐ์ด ์๊ฒจ๋ฉ๋๋ค. ๋ฐ์ดํฐ๋ค์ด ์๋ก ์ํธ์์ฉํ๋ฉด์ ํผ๋์ ๋น์ด๋ด๋๋ฐ react-query๋ฅผ ..
์ด๋ฏธ์งํ์ผ์ ๋ง์ด ๋ค๋ฃจ๋ ์
๋ฌด๋ฅผ ๋ณด๊ณ ์๋ค. ๊ฐ์๊ธฐ ์ถ๊ฐ๋ ์ด๋ค ์ด๋ฏธ์ง์ ๋ํด์ ํ๋ก ํธ์ชฝ์์ ์ฌ์ด์ฆ๋ฅผ ๋ฐ๊ฟ์ ์ ๋ฌํด์ผํ ์ผ์ด ์๊ฒผ๋ค. ๊ทธ๋์ ์ฐพ์์ ์ฐ๊ฒ ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ React Image File Resizer ๋๋ ๋์ ๋ฆฌ์กํธ ์ํ๊ณ์์ ์๋๊ฒ ์๋ค. ์ด๋ฏธ์ง์ width, height, format ๋ฑ์ ๋ฐ๊ฟ ์ ์๊ฒ ๋์์ฃผ๋ ํจํค์ง์ด๋ค. ์ค์นํ๊ธฐ npm i react-image-file-resizer or yarn add react-image-file-resizer ์ฌ์ฉํ๊ธฐ //๋ถ๋ฌ์ค๊ธฐ import Resizer from "react-image-file-resizer"; //์ด๋ป๊ฒ ๋ณ๊ฒฝํ ๊ฑด์ง์ ๋ํ ๋ด์ฉ์ ์ฐจ๋ก ์ฐจ๋ก ๋ฃ์ด์ฃผ๋ฉด ๋๋ค. Resizer.imageFileResizer( file, //๋ฐ..
useRef ๋ฅผ ์์ฃผ ์ฌ์ฉํ์ง ์๋๋ฐ, ์ค๋๋ง์ ์
๋ฌด๋ฅผ ๋ณด๋ค๊ฐ ์ฌ์ฉํ ์ผ์ด ์๊ฒผ์๋ค. ๊ทธ๋์ ๋ค์ ํ๋ฒ ์ ๋ฆฌํด๋ณธ๋ค!! useRef ์ฌ์ฉํ๊ธฐ ๋ฆฌ์กํธ๋ฅผ ์ฌ์ฉํ๋ฉด์ ์ฃผ๋ก useRef๋ฅผ ์ฌ์ฉํ ๋๋ ํน์ DOM ์์์๊ฒ ์ ๊ทผํด์ผํ ๋์ด๋ค. ์ปดํฌ๋ํธ์ ์๊ธด ์คํฌ๋กค ๋์์ ์ ์ดํด์ผํ๋ ์ํฉ์ด ์์๋๋ฐ, ์ด๋ useRef๋ฅผ ์จ์ ํ๋ฉด ๋๋ค. ์ด ์ธ์๋ ํฌ์ปค์ค๋ฅผ ์ค์ ํด์ค์ผํ๋ค๋์ง, ํฌ๊ธฐ๋ฅผ ํน์ ํด์ผํ๋ค๋์ง DOM์์์ ๋ํ ์ธ์ธํ ๊ฒ๋ค์ด ํ์ํ ๋ ์ธ ์ ์๋ค. ์ ๋ ๋ฆฌ์กํธ๋ฅผ ํจ์ํ์ผ๋ก ์ฐ๊ณ ์๊ธฐ๋๋ฌธ์ useRef hook์ ๋ํ ์ด์ผ๊ธฐ๋ฅผ ํฉ๋๋ค. ํด๋์คํ์ ์ฝ๋ฐฑํจ์๋ ์จ์ผํ๊ณ . ์ด์ง ๋ฐฉ๋ฒ์ด ๋ค๋ฆ
๋๋ค. useRef ์ ์ธํ๊ธฐ ์ ์ธ ๋ฐฉ๋ฒ์ ๊ฐ๋จํฉ๋๋ค. useRef ๋ฅผ ์ฌ์ฉํด์ ๋ณ์๋ฅผ ์ ์ธํด์ฃผ๊ณ ๊ทธ ์์ ์ด๊ธฐ๊ฐ์ ๋ฃ์ด์ค๋๋ค...
๐ข Error: App(...): Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null. โ
์ค๋๋ง์ ๋ง๋ ์ ๋ง ๊ฐ๋จํ ์๋ฌ! ์ต๊ทผ์ ๋ง๋ ์๋ฌ๋ค์ ๊ธฐ๋ณธ 2์๊ฐ ์ก์๋๊ฒ ๊ฐ์๋๋ฐ, ์ด ์๋ฌ๋ ์ ๋ง ๊ฐ๋จํ๊ฒ ์ฐพ์๋๋ค. ๊ดํธ๊ฐ ์ด๋๊ฐ์์ ๋ฏธ์ฝ๋์๋๊ฒ!! ๊ทธ๋์ return ์ ์๋ฆฌ์ return ์ด ์ ๋๋ก ๋ค์ด๊ฐ์ง ์์์ ์๊ธด ์๋ฌ์ด๋ค! ์ด๋๊ฐ์์ return ์ ์ ๋๋ก ํด์ฃผ์ง ๋ชป ํ ๋ ๋ํ๋๋ ์๋ฌ์ด๋, ์ฐฌ์ฐฌํ ์ฝ๋๋ฅผ ์ดํผ๋ค๋ณด๋ฉด ๋ฐ๋ก ํด๊ฒฐ ํ ์ ์๋ค!
ํ
์คํธ์ฝ๋๋ ์ ์ค์ํ๊ฐ์? ํ
์คํธ์ฝ๋๋ ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋ง ํ ๋, ํน์ ๋ฆฌํฉํ ๋ง์ ํ์ง ์์๋ ์ค์ํ ์กด์ฌ์
๋๋ค. ๋ฆฌํฉํ ๋ง์ ํ ๋์๋ ํ
์คํธ์ฝ๋๋ฅผ ์ง๋๊ณ ๋ฆฌํฉํ ๋ง์ ํ๋ฉด ํ๊ธฐ ์ ๊ณผ ํ์ ๊ฒฐ๊ณผ๊ฐ ๋์ผํ๋ค๋ ๊ฒ์ ๋ณด์ฅํ ์ ์์ต๋๋ค. ์ธ์๋ ์๋ก์ด ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋๊ฑฐ๋ ๊ธฐ์กด ๊ธฐ๋ฅ์ด ๋ณ๊ฒฝ๋์์ ๋ ๋ค๋ฅธ ๊ธฐ๋ฅ๋ค์ด ์ ๋๋ก ๋์ํ์ง ์์ ์๋ ์๊ธฐ ๋๋ฌธ์ ํ
์คํธ์ฝ๋๋ฅผ ๋ง๋ค์ด๋๋ฉด ์ ์ง๋ณด์ํ ๋ ์์์น ๋ชป ํ ์๋ฌ๋ค์ ๋ฏธ๋ฆฌ ๋ฐฉ์งํ ์ ๊ฐ ์์ต๋๋ค. ๋ค์ํ ๊ฐ๋ฐ์์ ์์๋ ์ด ์ค์์ฑ์ ๊ต์ฅํ ๊ฐ์กฐํ๊ณ ์์ต๋๋ค. React Testing Library๋ ์ธ๋ถ์ ์ธ ๊ตฌํ์ฌํญ๋ณด๋ค๋ ์ค์ ์ฌ์ฉ์ ๊ฒฝํ๊ณผ ์ ์ฌํ ๋ฐฉ์์ ํ
์คํธ๋ฅผ ์์ฑํ๊ธฐ๋ฅผ ๊ถ๊ณ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด์ div ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋์ง ๋ณด๋ค div ํ
๊ทธ์ ๋ฉ์ธ์ง๊ฐ ๋ธ๋ผ์ฐ์ ์ ์ ๋
ธ์ถ..
* ๋ฉด์ ์์ ๋ฐ์๋ ์ง๋ฌธ์ธ๋ฐ, ๋ต์ ๊ณ ์ฌํ๊ณ ์ง๋ฌธ ์์ฒด๋ฅผ ์ดํด ๋ชป ํ ์ ๋์์ผ๋, ์์ง ๋ชปํ๋ ๊ฐ๋
์ด์์ต๋๋ค. ๐ฅ Custom Hooks ๋ ๊ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ ํจ์์์ ๊ฐ์ ๋ก์ง์ ๊ณต์ ํ๊ณ ์ ํ ๋๋ ๋ ๋ค๋ฅธ ํจ์๋ก ๋ถ๋ฆฌํฉ๋๋ค. ์ปดํฌ๋ํธ์ Hook ๋ํ ํจ์์ด๊ธฐ ๋๋ฌธ์ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค - ์ด์ ๊ณต์ ์๋ฃ์ ๋์จ ์ค๋ช
์ธ๋ฐ, ์์ง ์ดํดํ๊ธฐ์๋ ๋ถ์กฑํ ์ค๋ช
๊ฐ์ต๋๋ค. ๋ฐ๋ณต๋๋ ํ
ํ์ฉ ๋ฉ์๋๋ค์ ํ๋๋ก ์ค์ฌ์ค์ผ๋ก์จ ๋ ๊ฐ๊ฒฐํ๊ณ ๋ณด๊ธฐ ์ข์ ์ฝ๋๋ฅผ ๋ง๋ค ์ ์๋ ๊ฒ์ด ๋ฐ๋ก custom hooks์
๋๋ค ์ด๋ฆ์ use๋ก ์์ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํจ์์
๋๋ค. custom hook์ ๋ค๋ฅธ hook์ ํธ์ถ ํ ์ ์์ต๋๋ค custom hook์ ์กฐ๊ฑด๋ถ ํจ์๊ฐ ์๋์ด์ผ ํฉ๋๋ค ์ญ์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ์ดํดํ๊ธฐ ์ข์ ๊ฑฐ..
์๊ณ ๋ณด๋ฉด ๋๋ ์ ์ฉํ ์ฌ์ดํธ์ธ Netlify! ์ฃผ๋ก ํธ์คํ
์ ํ๊ธฐ ์ํด์ ์ผ๋๋ฐ, netlify dev ๋ผ๋ ๊ธฐ๋ฅ๋ ์์ด์ ๋ฐฑ์๋๋ถ๋ถ๊น์ง ์ด์ง ๋์์ค ์ ์๋ ๊ธฐ๋ฅ๋ ๊ฐ์ง๊ณ ์๋ค. dev ๊ธฐ๋ฅ์ ์๊ฒ ๋์ง ์ผ๋ง ์ ๋์ ๊น์ด ๊ณต๋ถ๋ฅผ ์์ง ๋ชป ํ์ง๋ง ์ ์ฉํ๋ค๊ณ ์๊ฐํ์ ใ
์ค๋์ react netlify ๋ฐฐํฌ์ ๋ํด์ ์์๋ณด์! Netlify ( https://app.netlify.com/ ) 1. ๊ณ์ ์ ์์ฑํฉ๋๋ค ์ด๋ฉ์ผ๋ก๋ ๊ณ์ ์ ๋ง๋ค ์ ์์ง๋ง git๊ณผ ์ฐ๋ํ ์ ์๋ต๋๋ค. git ๊ณ์ ์ด ์๋ค๋ฉด ์์ฝ๊ฒ ๊ณ์ ์ ๋ง๋์ค ์ ์์ด์ 2. ์๋จ ๋ฉ๋ด์ [Sites] ๋ [new site from git] ์ ํด๋ฆญํฉ๋๋ค. netlify๋ก ๋ฐฐํฌํ๋๊ฒ ๋ฌด๋ฃ๋ผ๋ ์ด์ ๋ ์์ง๋ง, git์ ์ฌ๋ผ๊ฐ ์๋ ํ๋ก์ ํธ๋ฅผ ๋ฐ๋ก..
๐ฉ๐ป๐ป Today I Learned ๐ โญ๋ค์ด๊ฐ๋ฉฐ ์ค์ ํ๋ก์ ํธ์ ๋ค์ด๊ฐ๋ ๊ธฐ๋ฅ๊ณผ ๋์์ธ์ ์ดํด๋ณด๋ค๊ฐ ๋น์ฐํ๊ฒ ๋ฌดํ ์คํฌ๋กค์ ์จ์ผํ๋ค๋ ์๊ฒฌ์ด ๋์๋ค. ๊ฐ์๋ฅผ ๋ณด๋ฉฐ ๊ตฌํํด๋ณธ ์ ๋ ์๊ณ ์ด์ ๋ฏธ๋ ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ ๊ตฌํ์ ์ง์ ํด๋ณด์ง๋ ์์์ง๋ง ์ฝ๋๋ฅผ ํจ๊ป ๋ดค๋ ์ ์ด ์์๋ค. ํ์ง๋ง ๋ณธ ๊ฒ๊ณผ ์ง์ ๊ตฌํํ๋ ๊ฒ์ ์ฒ์ง ์ฐจ์ด๋ผ๋ ์ . ๋ฉ์ธ ํ์ด์ง ๊ฒ์๊ธ์ ์กฐํํ๋ ๋ถ๋ถ์์ ํ์ํ ๊ธฐ๋ฅ์ธ๋ฐ ๋ด๊ฐ ๋งก๊ฒ ๋ ํ์ด์ง๋ ์๋์ง๋ง ๋ฌดํ ์คํฌ๋กค์ ๊ตฌํํด๋ณด๊ณ ์ถ์ด์ ๋ฐ๋ก ๊ตฌํํ๋ค. โญ react-infinite-scroll-component ๋ฆฌ์กํธ์์ ๋ฌดํ ์คํฌ๋กค์ ๊ตฌํํ ์ ์๋ ๋ฐฉ๋ฒ์ด ๋ช ๊ฐ์ง๊ฐ ์๋๋ฐ, 1) ๋ธ๋ผ์ฐ์ ์ onScroll์ ์ด์ฉํด์ scrollHeight ๊ฐ์ ์ฌ์ฉํ๋ ๊ฑฐ๋ค. 2) Intersection..
๋ฆฌ์กํธ๋ก ๊ฐ๋จํ ๊ฒ์ํ์ ๋ง๋ค์ด๋ณด๊ธฐ๋ก ํ๋ค. ์ด ๊ฒ์ํ์ ๋ค์ด๊ฐ๋ ๊ธฐ๋ฅ ์ค์ ํ๋๊ฐ ์ ๋ณด๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด๋ค. ์ถ๊ฐํ๊ธฐ ์ํด์ ๋ฑ๋กํ์ด์ง๋ฅผ ๋ฐ๋ก ๋ง๋ค๊ณ ๋ฉ์ธ ํ์ด์ง๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด์ผํด์ router์ ์จ์ผํ๋ค. React Router ๋ฆฌ์กํธ๋ SPA (Single Page Application) ๋ฐฉ์์ผ๋ก์จ, ์ฌ๋ฌ ๊ฐ์ ํ์ด์ง๋ฅผ ์ฌ์ฉํ๋ฉฐ, ์๋ก์ด ํ์ด์ง๋ฅผ ๋ก๋ํ๋ ๊ธฐ์กด์ MPA ๋ฐฉ์๊ณผ ๋ฌ๋ฆฌ ์๋ก์ด ํ์ด์ง๋ฅผ ๋ก๋ํ์ง ์๊ณ ํ๋์ ํ์ด์ง ์์์ ํ์ํ ๋ฐ์ดํฐ๋ง ๊ฐ์ ธ์ค๋ ํํ๋ฅผ ๊ฐ์ง๋๋ค. ๊ทธ๋ฆผ์ฒ๋ผ ํ๋์ html ํ์ผ์์ ํ์์ถ๊ฐ ํ์ด์ง๋ก ๋์ด๊ฐ๊ธฐ ์ํด์ ํด๋ฆญ์ html์ด ๋ฐ๋๋๊ฒ ์๋๋ผ ํ์์ถ๊ฐ.js๋ก ๋ฐ์ดํฐ๊ฐ ๋ ๋๋งํด์ค๋ ๋ฐฉ์์ด SPA์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ฑธ ํ๊ธฐ ์ํด์ react-router๊ฐ ํ์ํฉ๋๋ค.