728x90
๋ฐ˜์‘ํ˜•

์ „์ฒด ๊ธ€ 46

Library] SWR : ์‘์šฉ_Mutate & Revalidation

Mutate mutate๋Š” ์›๊ฒฉ ๋ฐ์ดํ„ฐ ๋ฐ ์บ์‹ฑ๋œ ๊ฐ’์„ ๋ณ€๊ฒฝ, ๊ฐฑ์‹ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ณณ์—์„œ ํ•ด๋‹นํ•˜๋Š” ํ‚ค๊ฐ’์— ๋ฐ์ดํ„ฐ๋ฅผ post๋‚˜ delete, patch ๋“ฑ ์ž‘์—…์ด ์ผ์–ด๋‚ฌ์„ ๊ฒฝ์šฐ, ์บ์‹ฑ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐฑ์‹ ํ•ด์•ผ ๋  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค๊ณ  ๋ณด๋ฉด ๋ฉ๋‹ˆ๋‹ค. (revalidation) Global๊ณผ Bound ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋ˆ ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. Global Mutate useSWRConfig ๋˜๋Š” swr์„ import ํ•ด์„œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. import { useSWRConfig } from "swr" function App() { const { mutate } = useSWRConfig() mutate(key, data, options) } /////////////////////////////////////// impor..

Front-End/Library 2023.07.03

Library] SWR : ์‘์šฉ

2023.07.03 - [Front-End/Library] - Library] SWR ์ €๋ฒˆ ๊ฒŒ์‹œ๊ธ€์— ์ด์–ด์„œ SWR ์—ฌ๋Ÿฌ ๊ฐœ๋…? ๊ธฐ๋Šฅ? ๋“ค์„ ์„ค๋ช…ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ „์—ญ์„ค์ • ๋งŒ์•ฝ SWR์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ fetcher๊ฐ€ ์ค‘๋ณต๋œ๋‹ค๋ฉด ๊ณ ๋ คํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์„ ๋“ฏํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. import useSWR, { SWRConfig } from 'swr' function Dashboard () { const { data: events } = useSWR('/api/events') const { data: projects } = useSWR('/api/projects') const { data: user } = useSWR('/api/user', { refreshInterval: 0 }) // ์˜ค๋ฒ„๋ผ์ด๋“œ // ... } funct..

Front-End/Library 2023.07.03

Library] SWR

SWR(Stale-While-Revalidate) swr์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•œ React hook ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋ณด์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„์— GET์š”์ฒญ์„ ํ•˜๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„์™€ ๊ฐ„ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ axios๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํšจ์œจ์ด ์ข‹๋‹ค๊ณ  ๋ณด์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ํŠน์ง•์œผ๋กœ ๋น ๋ฅด๊ณ , ๊ฐ€๋ณ๊ณ , ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. ๋‚ด์žฅ๋œ ์บ์‹œ ๋ฐ ์š”์ฒญ ์ค‘๋ณต์„ ์ œ๊ฑฐ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋™์ž‘ 3๊ฐ€์ง€๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์„ ๋“ฏํ•ฉ๋‹ˆ๋‹ค. (์ €๋Š” ์บ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์ค‘๋ณต์œผ๋กœ ์š”์ฒญ์„ ์•ˆ ํ•œ๋‹ค๋Š” ๊ฒŒ ํฐ ์žฅ์ ์œผ๋กœ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.) ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. https://swr.vercel.app/ko ์„ค์น˜ npm i swr yarn add swr ๊ธฐ๋ณธ ๊ตฌ์„ฑ const { data, error, isLoading, isV..

Front-End/Library 2023.07.03

Library] Swiper

Swiper ์ด๋ฒˆ์— ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์‚ฌ์šฉํ•œ Swiper ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•ด ์ ์–ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. https://swiperjs.com/react ์ œ๊ฐ€ ์š”์ฆ˜์€ React๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— React๋ฐฉ์‹์œผ๋กœ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์„ค์น˜ npm i swiper ๊ธฐ๋ณธ ๊ตฌ์„ฑ HTML ์‚ฝ์ž… ๋ฏธ๋ฆฌ๋ณด๊ธฐํ•  ์ˆ˜ ์—†๋Š” ์†Œ์Šค ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์— ๋‚˜์™€์žˆ๋Š” ์†Œ์Šค์—์„œ ์ด๊ฒƒ์ €๊ฒƒ ์ˆ˜์ •ํ•ด ๋ดค์Šต๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜๊ณ , ์ œ๊ฐ€ ์‚ฌ์šฉํ–ˆ๋˜ ๋ฐฉ๋ฒ• ์„ค๋ช…ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. modules : ๊ธฐ๋ณธ Swiper ์™ธ์— ๋ชจ๋“ˆ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋””์ž์ธ์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Navigation, Pagination, Scrollbar ์ด 3๊ฐ€์ง€ ๋ชจ๋“ˆ์„ ์ถ”๊ฐ€ํ•œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋œ ๋ชจ๋“ˆ๋“ค์€ ์ถ”๊ฐ€๋กœ ์˜ต์…˜์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„ ์˜ˆ์‹œ๋กœ๋Š” pag..

Front-End/Library 2023.06.29

React] Hook : useCallback & useMemo ์–ธ์ œ ์‚ฌ์šฉํ•ด์•ผ ๋ ๊นŒ?

useCallback & useMemo ์–ธ์ œ ์‚ฌ์šฉํ•ด์•ผ ๋ ๊นŒ? ๋‘ ๊ฐœ์˜ hook์— ๋Œ€ํ•ด์„œ ๋‹ค์‹œ ํ•œ๋ฒˆ ๋‹ค๋ค„๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋‘ hook์€ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ๋˜๋‹ˆ๊น ํ•จ์ˆ˜๋‚˜ ๊ฒฐ๊ณผ๊ฐ’์ด ์žˆ๋Š” ๊ฑฐ์— ์ „๋ถ€ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์ง€ ์•Š์„๊นŒ??๋ผ๋Š” ์ƒ๊ฐ์„ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ์ƒ๊ฐ์— ์„ฑ๋Šฅ ์ข‹์•„์ง€๊ฒ ์ง€ ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋‹ค ๋ณด๋ฉด ๋˜๋ ค ์„ฑ๋Šฅ์ €ํ•˜๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์™œ๋ƒ๋ฉด ๊ฒฐ๊ตญ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ํ•˜๋Š”๋ฐ์—๋„ ๊ทธ๋งŒํ•œ ๋น„์šฉ์ด ๋“ค๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ์–ธ์ œ ์“ฐ๊ณ , ์–ธ์ œ ์“ฐ๋ฉด์•ˆ์ข‹์€์ง€์— ๋Œ€ํ•ด ์ž‘์„ฑํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. โŒ์‚ฌ์šฉํ•˜์ง€ ๋ง์•„์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๋ณต์žกํ•˜์ง€ ์•Š์€ ์—ฐ์‚ฐ์— ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์€ ์˜คํžˆ๋ ค ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„์ž…๋‹ˆ๋‹ค. onClick์ด๋ฒคํŠธ๋กœ setStateํ•ด์ฃผ๋Š” ๊ฒฝ์šฐ ๊ฐ™์ด ๋‹จ์ˆœํ•œ ์ƒํ™ฉ์ด๋ผ๋ฉด, ๋ฆฌ๋ Œ๋”๋ง ๋œ๋‹ค๊ณ  ํ•˜๋”๋ผ๊ณ  ๋‹ค์‹œ ๊ทธ๋ ค์ฃผ๋Š” ํŽธํžˆ ํ›จ์”ฌ ๋‚ซ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. React์—์„œ๋„ ..

Front-End/React 2023.06.29

Library] Axios : ์‘์šฉ

2023.06.27 - [Front-End/Library] - Library] Axios ์ด์ „ Axios๊ธ€์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งˆ์ง€๋ง‰ ์ฝ”๋ฉ˜ํŠธ์— ๋‹ฌ์•˜๋˜ ๋‚ด์šฉ๋“ค์„ ๋‹ค๋ค„๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋™์‹œ์š”์ฒญ axios .all([axios.get(), axios.get(), req3...]) .then(axios.spread((res1, res2, res3, res4) => { // ์š”์ฒญ ์„ฑ๊ณตํ–ˆ์„ ๋•Œ }) ) ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ–๊ณ  ์˜ค๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋ฉด ๋  ๋“ฏํ•ฉ๋‹ˆ๋‹ค. Instance const axiosInstance = () => { const instance = axios.create({ baseURL: 'http://localhost:3000/account', withCredentials: true, xsrfCoo..

Front-End/Library 2023.06.28

Library] Axios

Axios Node.js์™€ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์œ„ํ•œ HTTP ๋น„๋™๊ธฐ ํ†ต์‹  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ์„œ, Promise ํƒ€์ž…์ž…๋‹ˆ๋‹ค. BackEnd ↔ FrontEnd ์‚ฌ์ด์˜ ํ†ต์‹ ํ•˜๋Š” ์ˆ˜๋‹จ์œผ๋กœ, JS์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ajax๋‚˜ fetch์™€ ๊ฐ™๋‹ค๊ณ  ๋ณด๋ฉด ๋ฉ๋‹ˆ๋‹ค. Promise๊ธฐ๋ฐ˜์ด๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š”๋ฐ ํŽธ๋ฆฌํ•จ Response๊ฐ€ ์ž๋™์œผ๋กœ JSONํ˜•ํƒœ๋กœ ๋ณ€๊ฒฝ CSRF๋ณดํ˜ธ ๊ธฐ๋Šฅ์ด ๋‚ด์žฅ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‚ด์žฅ๋œ ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ์„ค์น˜๊ฐ€ ํ•„์š” ๋“ฑ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. fetch์™€ ajax๋ฅผ ๋ณด์™„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. CSRF(XSRF) : ์›น์‚ฌ์ดํŠธ ์ทจ์•ฝ์  ๊ณต๊ฒฉ์˜ ํ•˜๋‚˜๋กœ, ์‚ฌ์šฉ์ž๊ฐ€ ์ž์‹ ์˜ ์˜์ง€์™€๋Š” ๋ฌด๊ด€ํ•˜๊ฒŒ ๊ณต๊ฒฉ์ž๊ฐ€ ์˜๋„ํ•œ ํ–‰์œ„(CRUD ๋“ฑ)๋ฅผ ํŠน์ • ์›น์‚ฌ์ดํŠธ์— ์š”์ฒญํ•˜๊ฒŒ ํ•˜๋Š” ๊ณต๊ฒฉ ์„ค์น˜ npm install axios yarn ad..

Front-End/Library 2023.06.27

React] Hook : CustomHook

CustomHook ๊ฐœ๋ฐœํ•˜๋‹ค ๋ณด๋ฉด ๊ฐ™์€ ๋กœ์ง์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์ด ์ƒ๊ธฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿด ๋•Œ ๋ฐ˜๋ณต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์—†์• ๊ธฐ ์œ„ํ•ด ์ง์ ‘ hook์„ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๋ฉด ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๋กœ์ง์ด ๋„ˆ๋ฌด ๊ธธ๊ฑฐ๋‚˜ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์งˆ ๊ฒฝ์šฐ๋„ ์žˆ๊ณ , ๋กœ์ง๊ณผ ํƒœ๊ทธ๋“ค ์‚ฌ์ด์— ๊ตฌ๋ถ„์ด ์ง“๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•ด๋„ ์•„์ฃผ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. (ํ•จ์ˆ˜๋ฅผ ์ชผ๊ฐœ์„œ ๋งŒ๋“ ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” hook์„ ์‚ฌ์šฉํ•  ๋ฟ...) ์˜ˆ HTML ์‚ฝ์ž… ๋ฏธ๋ฆฌ๋ณด๊ธฐํ•  ์ˆ˜ ์—†๋Š” ์†Œ์Šค name์ด๋ž‘ email ๋‘ ๊ฐœ์˜ state๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. name์€ ์ง์ ‘ ๋งŒ๋“  useInput์ด๋ผ๋Š” ์ปค์Šคํ…€ํ›…์„ ์‚ฌ์šฉํ•˜์˜€๊ณ , email์€ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋กœ์ง์ƒ ๋‘ ๊ฐœ์˜ ์ฐจ์ด์ ์ด ์—†๋Š” ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ useInput์ด๋ผ๋Š” ์ปค์Šคํ…€ ํ›…์„ ๋งŒ๋“ค์ง€ ์•Š์•˜๋‹ค๋ฉด, email..

Front-End/React 2023.06.26

React] Fragment <></>

Fragment ํƒœ๊ทธ ์ฒ˜์Œ์— ์ปดํฌ๋„ŒํŠธ๊ด€๋ จํ•ด์„œ ์งง๊ฒŒ ์„ค๋ช…ํ–ˆ๋˜ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค. React์—์„œ ์ œ๊ณตํ•ด ์ฃผ๋Š” ๊ธฐ๋ณธ ์ปดํฌ๋„ŒํŠธ์ด๋ฉฐ, ๋™์ผํ•œ ๋ ˆ๋ฒจ์˜ ํƒœ๊ทธ๋ฅผ ๋ฐ˜ํ™˜ํ•ด ์ค˜์•ผ ๋  ๋•Œ, ๊ทธ ์ƒ์œ„๋กœ ๋‹ฌ์•„์ฃผ๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ํ•˜๋‚˜์˜ ํƒœ๊ทธ๊ฐ€ ๋ฐ˜ํ™˜๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์˜ˆ HTML ์‚ฝ์ž… ๋ฏธ๋ฆฌ๋ณด๊ธฐํ•  ์ˆ˜ ์—†๋Š” ์†Œ์Šค (์ƒ๊ธด๊ฒŒ ์ด์ƒํ•˜๊ธด ํ•˜์ง€๋งŒ...) ์ „์ฒด๋ฅผ ํƒœ๊ทธ๋กœ ๊ฐ์‹ธ์ค˜์„œ h1, h2, span 2๊ฐœ๊ฐ€ ๋™์ผ ์„ ์ƒ์˜ ๋ ˆ๋ฒจ๋กœ ๊ทธ๋ ค์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์˜๋ฏธ ์—†๋Š” div๋‚˜ span ๋“ฑ ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋ณด๋‹ค๋Š” Fragmentํƒœ๊ทธ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์‹ค์ œ HTML ๊ทธ๋ ค์งˆ ๋•Œ ์ข€ ๋” ํšจ์œจ์ ์œผ๋กœ ๊ทธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ map ๋Œ๋ฆด ๋•Œ ๋ณด๋ฉด, key๊ฐ’์„ ์ž…๋ ฅํ•ด์•ผ ๋˜๋Š”๋ฐ ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ๊ฐ๋ณด๋‹ค ์ž์ฃผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋Š” ์œ ์šฉํ•œ ํƒœ๊ทธ...

Front-End/React 2023.06.26

React] Hook : useContext ๋‹จ์  ํ•ด๊ฒฐ

useContext 2023.06.23 - [Front-End/React] - React] Hook : useContext ์•ž ๊ฒŒ์‹œ๊ธ€์—์„œ ์–˜๊ธฐํ–ˆ๋˜ useContext์˜ ๋‹จ์ ์€ ๋ฆฌ๋ Œ๋”๋ง์ด ์ž์ฃผ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ๊ฐœ์„ ํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ HTML ์‚ฝ์ž… ๋ฏธ๋ฆฌ๋ณด๊ธฐํ•  ์ˆ˜ ์—†๋Š” ์†Œ์Šค ์•ž์— ์˜ˆ๋ฅผ ๋“ค์—ˆ๋˜ ๋งˆํŠธ ์ฝ”๋“œ์—์„œ๋Š” 2์ธต ๊ณผ์ผ, 3์ธต ์Œ๋ฃŒ์ˆ˜๋กœ ๋ณ€๊ฒฝํ•˜์˜€์Šต๋‹ˆ๋‹ค/ ๋งŒ์•ฝ addDrink๋ฟ๋งŒ ์•„๋‹ˆ๋ผ addFruit๋ฅผ context์ถ”๊ฐ€ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ณ , ์ด๋ฅผ Emart2F๋ผ๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด, addFruit ํ•˜๊ฒŒ ๋  ๋•Œ Emart3F๋„ ๋ฆฌ๋ Œ๋”๋ง ๋˜๋Š” ํ˜„์ƒ์„ ๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ๋ช‡ ๊ฐ€์ง€ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. Emart.js import React, { useState, use..

Front-End/React 2023.06.26
728x90
๋ฐ˜์‘ํ˜•