Frontend ๐Ÿ“š 41

[์ฝ”๋”ฉ์• ํ”Œ] ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ Part10 - ์„ฑ๋Šฅ๊ฐœ์„  2: memo, useMemo, useTransition, useDeferredValue

โœ๏ธ memo()๋กœ ์ปดํฌ๋„ŒํŠธ ๋ถˆํ•„์š”ํ•œ ์žฌ๋ Œ๋”๋ง ๋ง‰๊ธฐ - memo() ์“ฐ๋ ค๋ฉด 'react' ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ๋ถ€ํ„ฐ import ํ•ด์˜ค๋ฉด ๋œ๋‹ค. import {memo, useState} from 'react' // memo๋ฅผ import let Child = memo( function(){ // ์›ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ ์ •์˜ ๋ถ€๋ถ„ ๊ฐ์‹ธ๊ธฐ console.log('์žฌ๋ Œ๋”๋ง๋จ') return ์ž์‹์ž„ }) function Cart(){ let [count, setCount] = useState(0) return ( { setCount(count+1) }}> + ) } - ์ปดํฌ๋„ŒํŠธ๋ฅผ let ์ปดํฌ๋„ŒํŠธ๋ช… = function( ){ } ์ด๋Ÿฐ ์‹์œผ๋กœ ๋งŒ๋“ค์–ด์•ผ ๊ฐ์Œ€ ์ˆ˜ ์žˆ๋‹ค. - ๊ทธ๋Ÿผ ์ด์ œ Child๋กœ ์ „์†ก๋˜๋Š” props๊ฐ€ ๋ณ€ํ•˜๊ฑฐ๋‚˜ ๊ทธ๋Ÿฐ ๊ฒฝ..

[์ฝ”๋”ฉ์• ํ”Œ] ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ Part9 - ์„ฑ๋Šฅ๊ฐœ์„  1: ๊ฐœ๋ฐœ์ž๋„๊ตฌ, lazy import

- props๋ฅผ ๋ณด๋ƒˆ๋Š”๋ฐ ์ถœ๋ ฅ์ด ์•ˆ๋œ๋‹ค๊ฑฐ๋‚˜, ์ด๋ฏธ์ง€๋ฅผ ๋„ฃ์—ˆ๋Š๋ฐ ์•ˆ๋ณด์ด๋Š” ๋ฒ„๊ทธ๊ฐ™์€ ๊ฒŒ ์ƒ๊ธด๋‹ค๋ฉด - ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ์ผœ์„œ Elements ํƒญ ์‚ดํŽด๋ณด๋ฉด ๋˜๋Š”๋ฐ ์—ฌ๊ธฐ์„  ๋‚ด๊ฐ€ ์ง  ์ฝ”๋“œ๋ฅผ ์‹ค์ œ html css๋กœ ๋ณ€ํ™˜๋˜์–ด์„œ ๋ณด์—ฌ์ง„๋‹ค. - ๊ทธ๊ฒŒ ์‹ซ๊ณ  ์ปดํฌ๋„ŒํŠธ๋กœ ๋ฏธ๋ฆฌ ๋ณด๊ณ  ์‹ถ์œผ๋ฉด ๋ฆฌ์•กํŠธ ๊ฐœ๋ฐœ์ž๋„๊ตฌ๋ฅผ ์„ค์น˜ํ•ด์„œ ์ผœ๋ณด๋ฉด ๋œ๋‹ค. โœ๏ธ ํฌ๋กฌ ํ™•์žฅํ”„๋กœ๊ทธ๋žจ: React Developer Tools https://chrome.google.com/webstore/ Chrome ์›น ์Šคํ† ์–ด Chrome์— ์‚ฌ์šฉํ•  ์œ ์šฉํ•œ ์•ฑ, ๊ฒŒ์ž„, ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ ๋ฐ ํ…Œ๋งˆ๋ฅผ ์ฐพ์•„๋ณด์„ธ์š”. chrome.google.com - ํฌ๋กฌ ์›น์Šคํ† ์–ด ๋“ค์–ด๊ฐ€๋ฉด ํ™•์žฅํ”„๋กœ๊ทธ๋žจ ์„ค์น˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. - ์—ฌ๊ธฐ์„œ React developer Tools ์„ค์น˜ํ•˜๋ฉด Compoents ํƒญ์ด ์ƒ๊ธฐ..

[์ฝ”๋”ฉ์• ํ”Œ] ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ 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 ์ „..