Frontend ๐Ÿ“š/React 23

[์ฝ”๋”ฉ์• ํ”Œ] ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ Part8 - localStorage, react-query

โœ๏ธ localStorage - ์ƒˆ๋กœ๊ณ ์นจํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๋Š” html css js ํŒŒ์ผ๋“ค์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์ฝ๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  state ๋ฐ์ดํ„ฐ๋Š” ๋ฆฌ์…‹๋œ๋‹ค. - ์ด๊ฑธ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” state ๋ฐ์ดํ„ฐ๋Š” ์„œ๋ฒ„๋กœ ๋ณด๋‚ด DB์— ์ €์žฅํ•˜๊ฑฐ๋‚˜ LocalStorage์— ์ €์žฅํ•˜๋Š”๋ฐ - ์˜ค๋Š˜ ๋ฐฐ์šธ ๋‚ด์šฉ์€ LocalStorage์— ๊ด€ํ•ด์„œ์ด๋‹ค. - LocalStorage๋Š” ์‰ฝ๊ฒŒ ๋งํ•ด ์œ ์ €์˜ ๋ธŒ๋ผ์šฐ์ €์— ๋ชฐ๋ž˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์“ฐ๋Š” ๊ณต๊ฐ„์ธ๋ฐ ์œ ์ €๊ฐ€ ๋ธŒ๋ผ์šฐ์ € ์ฒญ์†Œ๋ฅผ ํ•˜์ง€ ์•Š๋Š” ์ด์ƒ ์˜๊ตฌ์ ์œผ๋กœ ๋‚จ์•„์žˆ๋‹ค. - ์‚ฌ์ดํŠธ๋งˆ๋‹ค 5MB ์ •๋„์˜ ๋ฌธ์ž์—ด์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ณ  - object ์ž๋ฃŒ์™€ ๋น„์Šทํ•˜๊ฒŒ key/value ํ˜•ํƒœ๋กœ ์ €์žฅํ•œ๋‹ค. โœ๏ธ localStorage ๋ฌธ๋ฒ• - ๊ทธ๋ƒฅ js ํŒŒ์ผ ์•„๋ฌด๋ฐ์„œ๋‚˜ ๋‹ค์Œ ๋ฌธ๋ฒ•์„ ์“ฐ๋ฉด localStorage์— ..

[์ฝ”๋”ฉ์• ํ”Œ] ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ Part7 - ๋ฆฌ์•กํŠธ์—์„œ ์ž์ฃผ ์“ฐ๋Š” if๋ฌธ ์ž‘์„ฑ ํŒจํ„ด

1๏ธโƒฃ ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ ์“ฐ๋Š” if/else function Component() { if ( true ) { return ์ฐธ์ด๋ฉด ๋ณด์—ฌ์ค„ HTML; } else { return null; } } // ๋˜๋Š”, ์•„๋ž˜์™€ ๊ฐ™์ด ์“ฐ๋ฉด else ์ƒ๋žต ๊ฐ€๋Šฅ function Component() { if ( true ) { return ์ฐธ์ด๋ฉด ๋ณด์—ฌ์ค„ HTML; } return null; } - return + JSX ์ „์ฒด๋ฅผ ๋ฑ‰๋Š” if๋ฌธ 2๏ธโƒฃ JSX ์•ˆ์—์„œ ์“ฐ๋Š” ์‚ผํ•ญ์—ฐ์‚ฐ์ž function Component() { return ( { 1 === 1 ? ์ฐธ์ด๋ฉด ๋ณด์—ฌ์ค„ HTML : null } ) } // ์•„๋ž˜์™€ ๊ฐ™์ด ์ค‘์ฒฉ ์‚ฌ์šฉ๋„ ๊ฐ€๋Šฅ, ํ•˜์ง€๋งŒ ๊ฐ€๋…์„ฑ์ด ์ข‹์ง€ ์•Š๋‹ค. function Component() { return ( {..

[์ฝ”๋”ฉ์• ํ”Œ] ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ Part6 - Redux

๐Ÿ’‍โ™€๏ธ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ํŽ˜์ด์ง€ ๋งŒ๋“ค๊ธฐ // Cart.js import { Table } from 'react-bootstrap' let state = useSelector((state)=> state) # ์ƒํ’ˆ๋ช… ์ˆ˜๋Ÿ‰ ๋ณ€๊ฒฝํ•˜๊ธฐ { state.cart.map((a, i)=> 1 {state.cart[i].name} {state.cart[i].count} ์•ˆ๋…• ) } โœ๏ธ Redux โœ๏ธ Redux ์“ฐ๋ฉด ์ข‹์€ ์  - props ์—†์ด ํŽธ๋ฆฌํ•˜๊ฒŒ state ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ! ๊ฐ„๋‹จํ•œ ๊ฑฐ ๋งŒ๋“ค ๋•Œ, ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ช‡ ๊ฐœ ์—†์„ ๋•Œ → props ์“ฐ๋Š”๊ฒŒ ๋” ์ด๋“์ž„ - ์ด๊ฑฐ ์„ค์น˜ํ•˜๋ฉด js ํŒŒ์ผ ํ•˜๋‚˜์— state๋“ค์„ ๋ณด๊ด€ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๊ทธ๊ฑธ ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ง์ ‘ ๊บผ๋‚ด์“ธ ์ˆ˜ ์žˆ์Œ. - ๊ทธ๋ž˜์„œ ๊ท€์ฐฎ์€ props ์ „..

[์ฝ”๋”ฉ์• ํ”Œ] ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ Part5 - Context API

๐Ÿ’‍โ™€๏ธ ํƒญ UI ๋งŒ๋“ค๊ธฐ 1. html css๋กœ ํƒญ ๋””์ž์ธ ๋ฏธ๋ฆฌ ์™„์„ฑํ•˜๊ธฐ { ํƒญ๋ณ€๊ฒฝ(0) }} eventKey="link0">๋ฒ„ํŠผ0 { ํƒญ๋ณ€๊ฒฝ(1) }} eventKey="link1">๋ฒ„ํŠผ1 { ํƒญ๋ณ€๊ฒฝ(2) }} eventKey="link2">๋ฒ„ํŠผ2 ๋‚ด์šฉ0 ๋‚ด์šฉ1 ๋‚ด์šฉ2 2. UI์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ์ €์žฅํ•  state ํ•˜๋‚˜ ๋งŒ๋“ค๊ธฐ function Detail(){ let [ํƒญ, ํƒญ๋ณ€๊ฒฝ] = useState(0) (์ƒ๋žต) } 3. state์— ๋”ฐ๋ผ์„œ UI๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณด์ผ์ง€ ์ž‘์„ฑ function Detail(){ let [ํƒญ, ํƒญ๋ณ€๊ฒฝ] = useState(0) return ( ) } function TabContent(props){ // detail ์•ˆ์— ์žˆ๋Š” state ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด props if (props...

[์ฝ”๋”ฉ์• ํ”Œ] ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ Part4 - Lifecycle, useEffect, AJAX

โœ๏ธ Lifecycle โœ๏ธ ์ปดํฌ๋„ŒํŠธ์˜ Lifecycle - ์ปดํฌ๋„ŒํŠธ๋Š” mount(์ƒ์„ฑ), update(์žฌ๋ Œ๋”๋ง), unmount(์‚ญ์ œ) ๋  ์ˆ˜ ์žˆ๊ณ  - ์ปดํฌ๋„ŒํŠธ์˜ Lifecycle์— hook์„ ์ด์šฉํ•œ ๊ฐ„์„ญ(ํŠน์ • ์ฝ”๋“œ ์‹คํ–‰)์ด ๊ฐ€๋Šฅํ•˜๋‹ค. โœ๏ธLifecycle hook import {useState, useEffect} from 'react'; function Detail(){ useEffect(()=>{ //์—ฌ๊ธฐ์ ์€ ์ฝ”๋“œ๋Š” ์ปดํฌ๋„ŒํŠธ ๋กœ๋“œ & ์—…๋ฐ์ดํŠธ ๋งˆ๋‹ค ์‹คํ–‰๋จ -> lifecycle hook console.log('์•ˆ๋…•') }); return (์ƒ๋žต) } ๐Ÿ’‍โ™€๏ธ ์˜ˆ์‹œ import {useState, useEffect} from 'react'; function Detail(){ useEffect(()=..