react

ยท react
useReducer๋ž€ ๋ฌด์—‡์ผ๊นŒ? useReducer๋Š” ๋ฆฌ์•กํŠธ์—์„œ ์ œ๊ณตํ•˜๋Š” ์ƒํƒœ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ํ›…์ž…๋‹ˆ๋‹ค. useState์™€๋Š” ๋‹ค๋ฅธ ์ƒํƒœ๊ด€๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ์žฅ์ ์ธ๋ฐ์š”. ์ด ํ›…์„ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ ์—…๋ฐ์ดํŠธ ๋กœ์ง์„ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ถ„๋ฆฌ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š”๊ฒŒ ์žฅ์ ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํŒŒ์ผ์— ์ž‘์„ฑ ํ›„ ๋ถˆ๋Ÿฌ์™€์„œ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. useReducer์˜ ๊ตฌ์„ฑ์š”์†Œ const reducer = (state,action) => { } const initialState = { } function App(){ const [state,dispatchFn] = useReducer(reducer,initialState); //์ดํ•˜์ƒ๋žต.. } useReducer๋Š” reducer ํ•จ์ˆ˜์™€ ์ดˆ๊ธฐ๊ฐ’์ธ initialState๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„์•ผ ํ•ฉ๋‹ˆ..
ยท react
useReducer ์šฐ๋ฆฌ๋Š” react์—์„œ useState๋กœ ์ƒํƒœ๊ด€๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ  ์ด๋Š” ๊ฝค ๊ฐ„๋‹จํ•˜๋‹ค. ํ•˜์ง€๋งŒ ์กฐ๊ธˆ์˜ ๋ณต์žกํ•œ ์ƒํƒœ๋ฅผ ๋‹ค๋ฃจ์–ด์•ผ ํ•œ๋‹ค๋ฉด useReducer๋ฅผ ๊ณ ๋ คํ•ด๋ณด์ž ๋ณต์žกํ•œ ์ƒํƒœ์˜ ๊ฒฝ์šฐ useState๋งŒ์„ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋ ค์›Œ์ง€๊ณ  ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ฌธ์ œ๊ฐ€ ๋ ๋งŒํ•œ ๋ถ€๋ถ„ ๋‹ค๋ฅธ state๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ state๋ฅผ ์—…๋ฐ์ดํŠธ ํ•  ๋•Œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค. -> useReducer๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ํ•˜๋‚˜์˜ state, ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋ณด๊ด€ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๋” ๋ณต์žกํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ์˜ˆ์‹œ์ฝ”๋“œ const [state, dispatchFn] = useReducer(reducerFn, initialState, initFn); useReducer ์‚ฌ์šฉํ•ด๋ณด๊ธฐ const [entered..
ยท react
์—ฌ๋Ÿฌ๋ถ„๋“ค ๋ฆฌ์•กํŠธ์—์„œ useEffect๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋”ฉ์„ ํ•˜๋Š”๋ฐ useEffect๊ฐ€ 2๋ฒˆ ์‹คํ–‰๋˜์–ด ๋‚œ๊ฐ ํ•˜์…จ๋˜ ์ ์ด ์žˆ์œผ์‹ ๊ฐ€์š”? ์ € ๋˜ํ•œ useEffect์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ฝ˜์†” ์ถœ๋ ฅ์„ ํ•ด๋ณด๋ฉด 2๋ฒˆ์ด ์ถœ๋ ฅ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์˜ ์ด์œ ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. 1.React StrictMode - CRA์—์„œ React Strict Mode ์—†๊ธฐ cra๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค๋ฉด strict mode๊ฐ€ index.js์— ์ ์šฉ๋˜์–ด ์žˆ์„ ํ…๋ฐ ์ด๊ฒƒ์„ ์ œ๊ฑฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. 2. Next.js์—์„œ React Strict Mode ์—†์• ๊ธฐ next.config.js์—์„œ reactStrictMode๋ฅผ false๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. strict ๋ชจ๋“œ๋Š” ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์ˆ˜๋ช… ์ฃผ๊ธฐ, ๋ ˆ๊ฑฐ์‹œ API ์‚ฌ..
ยท react
fetch๋‚˜ axios๋กœ data๋ฅผ fetching ํ•œ๋‹ค๋ฉด ์œ„์™€ ๊ฐ™์ด state๋ฅผ ๋งŒ๋“ค๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜จ ์ดํ›„ setState๋ฅผ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐฑ์‹ ํ•ด ์ฃผ์–ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ ์šฉํ•œ ํ”„๋กœ์ ํŠธ์—์„œ ์œ„ ๊ฐ™์ด ์“ธ ๊ฒฝ์šฐ์—๋Š” state๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. state๊ฐ€ ๊ฐ์ฒด๋ผ๋ฉด state.value์™€ ๊ฐ™์ด ์ ‘๊ทผํ• ํ…๋ฐ ์ด ๋ถ€๋ถ„์—์„œ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์˜ค๋ฅ˜๋กœ ๊ฐ์ง€ํ•ฉ๋‹ˆ๋‹ค. useState({})๋งŒ์„ ์ž…๋ ฅํ•œ๋‹ค๋ฉด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” {} ๋งŒ์œผ๋กœ๋Š” ํƒ€์ž… ์ถ”๋ก ์„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ boolean๊ณผ ๊ฐ™์ด ํƒ€์ž…์ด ํ™•์‹คํ•œ ๊ฐ’์„ ์ฃผ์—ˆ๋‹ค๋ฉด ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•ด๊ฒฐ๋ฐฉ๋ฒ• any๊ฐ€ ์ถ”๊ฐ€๋˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ์ด ๋ฉ๋‹ˆ๋‹ค. ํ˜น์€ ์œ„์™€ ๊ฐ™์€ Interface( ์œ„์˜ ์ฝ”๋“œ์™€๋Š” ์ƒ๊ด€ ์—†๋Š” ์ฝ”๋“œ) ๋ฅผ ์„ ์–ธํ•ด์„œ ๋Œ€์‹  ์จ์ฃผ๋ฉด ๋˜๋Š”๋ฐ ..
ยท react
๋ฆฌ์•กํŠธ๋กœ ๊ฐœ๋ฐœํ•  ๋•Œ ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ fetchingํ•˜๊ณ  loading ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ state์™€ fetchํ˜น์€ axios๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•œ๋‹ค. ์ด ์ผ๋ จ์˜ ๊ณผ์ •์„ ๋‹จ ์ฝ”๋“œ ํ•˜๋‚˜๋กœ ๊ฐ„ํŽธํ™” ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ caching๊ธฐ๋Šฅ ๊นŒ์ง€ ์žˆ๋Š” react-query๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ๋‹ค. import { QueryClient, QueryClientProvider } from "react-query"; root.render( ); ์•„์ง์€ ์™œ providerํ˜•์‹์œผ๋กœ ์ตœ์ƒ์˜ ๋ถ€๋ชจ์—๊ฒŒ ์œ„์™€ ๊ฐ™์ด ํ•ด์ฃผ๋Š” ์ง„ ๋ชจ๋ฅด๊ฒ ๋‹ค. ๋‚ด ๋ธ”๋กœ๊ทธ๋Š” ์•„์ง ์ •๋ณด์ „๋‹ฌ์„ฑ ๋ณด๋‹ค๋Š” ๊ณต๋ถ€ ๊ธฐ๋ก ์ผ๊ธฐ์— ๊ฐ€๊นŒ์šฐ๋‹ˆ ์ด๋Š” ์ฐจํ›„์— ๋‚ด ์‹ค๋ ฅ์ด ๋‚จ์—๊ฒŒ ์ข‹์€ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜์ค€์ด ๋œ๋‹ค๋ฉด ํฌ์ŠคํŒ… ํ•  ๊ฒƒ์ด๋‹ค. const { isLoading, data } = useQue..
ยท react
๋ฆฌ์•กํŠธ ๊ฐœ๋ฐœ์„ ํ•  ๋•Œ CSS๋ฅผ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋”ฐ๋กœ cssํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์„œ js, jsx ํŒŒ์ผ์— importํ•˜๊ฑฐ๋‚˜ ์ธ๋ผ์ธ์œผ๋กœ ์ง€์ •ํ•ด์คฌ์–ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ „์ž์˜ ๊ฒฝ์šฐ๋Š” ํŒŒ์ผ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๊ณ  ํด๋ž˜์Šค ๋„ค์ž„์„ ์ผ์ผ์ด ๋ถ™์—ฌ์ค˜์•ผ ๋œ๋‹ค๋Š” ๋ถˆํŽธํ•จ์ด ์žˆ๊ณ  ํ›„์ž์˜ ๊ฒฝ์šฐ๋Š” jsx๋ฐฉ์‹์œผ๋กœ css์Šคํƒ€์ผ์„ ์ง€์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค๋Š” ๋ถˆํŽธํ•จ์ด ๋”ฐ๋ฅด์ฃ . ์ด๊ฒƒ๋“ค์„ ํ•ด๊ฒฐํ•ด์ฃผ๊ณ  ์กฐ๊ธˆ๋” ๋ฆฌ์•กํŠธ ์Šค๋Ÿฝ๊ฒŒ ์Šคํƒ€์ผ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์—ฌ๋Ÿฌ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•ด์ฃผ๋Š” styled-components๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. styled-components ์„ค์น˜ npm install styled-components js ํŒŒ์ผ์— import import styled from "styled-components"; styled-components ์‚ฌ์šฉ๋ฒ• const Box = ..
ยท react
Recoil์„ ์ „์—ญ ์ƒํƒœ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋ฆฌ์•กํŠธ ์นœํ™”์ ์ธ ๋ฌธ๋ฒ•๊ณผ ๊ทธ ์‚ฌ์šฉ์ด ๊ฐ„ํŽธํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ CNU SW ์•„์นด๋ฐ๋ฏธ TA๋‹˜์—๊ฒŒ ์ถ”์ฒœ๋ฐ›์€ ์ƒํƒœ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. ๋ฆฌ๋•์Šค๋Š” ๊ทธ ์ดํ›„์— ์‚ฌ์šฉํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์šฐ์„ , recoil์˜ ์‚ฌ์šฉ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ํฌ์ŠคํŒ…ํ•˜๊ณ ์ž ํ•œ๋‹ค. ์ด ๊ธ€์„ ์ฝ์œผ๋ฉด ์•„์ฃผ ๊ธฐ๋ณธ์ ์ธ recoil ์‚ฌ์šฉ๋ฐฉ๋ฒ•์„ ์•Œ๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. Recoil ์„ค์น˜ npm install recoil RecoilRoot import React from 'react'; import { RecoilRoot, } from 'recoil'; function App() { return ( ); } recoil์˜ ์ƒํƒœ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋Š” ๋ถ€๋ชจํŠธ๋ฆฌ ์–ด๋”˜๊ฐ€์— ๋‚˜ํƒ€๋‚˜๋Š” RecoilRoot๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ํ•œ๋‹ค. ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์—์„œ๋Š” ๋ฃจํŠธ ์ปดํฌ๋„Œ..
ยท react
- ์ƒํƒœ๊ด€๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ „์—ญ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง์„ ์ค„์ด๊ณ  props drilling์„ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค. - ์ƒํƒœ๋“ค์ด ๋ณต์žกํ•˜๊ฒŒ ์–ฝํ˜€์žˆ๋‹ค ์ƒํ˜ธ์˜์กด์„ฑ์ด ๋†’์•„UI๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณ€ํ•˜๋Š”์ง€ ์•Œ๊ธฐ ์–ด๋ ต๋‹ค. ํ”„๋กœ์ ํŠธ๊ฐ€ ์ปค์ง€๊ณ  state๊ฐ€ ์ˆ˜์‹ญ~์ˆ˜๋ฐฑ๊ฐœ๊ฐ€ ๋œ๋‹ค๋ฉด ์ƒํƒœ๊ด€๋ฆฌ๊ฐ€ ๋‹น์—ฐํžˆ ํ•„์š”ํ•  ๊ฒƒ์ด๋‹ค. 1. context api ๊ฐ„๋‹จํ•œ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” props drilling์„ ํ”ผํ•  ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ๋Œ€์•ˆ์ด ๋  ์ˆ˜ ์žˆ๋‹ค. useReducer๋ฅผ ๊ฐ™์ด์“ฐ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. useReducer๋Š” state๋ฅผ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. 2. redux ๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŠธ๊ฐ€ ๋ณต์žกํ•˜๋‹ค๊ณ  ํ•˜๋Š”๋ฐ redux toolkit์œผ๋กœ ์“ฐ๋ฉด ๋” ์‰ฝ๊ณ  ๊ฑฐ๊ธฐ์— ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋กœ ์“ฐ๋ฉด ํฐ ํ”„๋กœ์ ํŠธ ์Šค์ผ€์ผ๋งํ•˜๊ธฐ๋„ ํŽธํ•˜๋‹ค๊ณ  ํ•œ๋‹ค. "์ œ๊ฐ€ ๊ฒฝํ—˜ํ•œ๊ฑธ๋กœ๋Š” ์‡ผํ•‘๋ชฐ ์žฅ๋ฐ”๊ตฌ๋‹ˆ..
๊น€ํƒœ์ง„
'react' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก