React

    [ReactJS] ๊ฐœ๋ฐœ ๋„์ค‘ ๋งˆ์ฃผํ–ˆ๋˜ ์˜ค๋ฅ˜ ๋ชจ์Œ (2022๋…„ 11-12์›”)

    React ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ์›น ๊ฐœ๋ฐœ์„ ํ•˜๋˜ ๋„์ค‘ ๋งˆ์ฃผํ–ˆ๋˜ ์—ฌ๋Ÿฌ ์—๋Ÿฌ๋“ค์„ ์ž์ž˜ํ•œ ๊ฒƒ๋ถ€ํ„ฐ ๊ทœ๋ชจ๊ฐ€ ์ปธ๋˜ ๊ฒƒ๊นŒ์ง€ ๋ชจ๋‘ ๊นƒํ—ˆ๋ธŒ์— md๋ฌธ์„œ๋กœ ์ •๋ฆฌํ•ด๋‘์—ˆ๋‹ค. ํ˜น์‹œ ๋น„์Šทํ•œ ์—๋Ÿฌ๋ฅผ ๋˜ ๋งˆ์ฃผํ•˜๊ฒŒ ๋˜๋ฉด ์—ฌ๊ธฐ์— ์™€์„œ Ctri+F๋ฅผ ํ†ตํ•ด ๊ฒ€์ƒ‰ํ•ด์„œ ์ฐพ์•„๋ณด์ž. DOM์— ์ง์ ‘ ์ ‘๊ทผํ•˜์—ฌ classList ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ œ๊ฑฐํ–ˆ๋”๋‹ˆ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค. React์—์„œ ํŠน์ • ์š”์†Œ์— ์ด๋ฒคํŠธ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ , event ๊ฐ์ฒด๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„ ํ™œ์šฉํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋Š”๋ฐ, event is deprecated ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. setState๋ฅผ ํ†ตํ•ด ์ƒํƒœ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋‹ˆ ์›ํ•˜๋Š” ๊ฐ’์ด ํ•˜๋‚˜์”ฉ ๋ฐ€๋ฆฐ ์ฑ„ ๋ณ€๊ฒฝ๋˜๋Š” ๋ฐ”๋žŒ์—, ์ƒํƒœ๊ฐ’์„ ํ™œ์šฉํ•œ ๋กœ์ง์ด ๋‚ด ์˜๋„๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค. (Router๋ฅผ ํ™œ์šฉํ•œ) React ํ”„๋กœ์ ํŠธ๋ฅผ ์ดˆ๊ธฐ ์„ธํŒ…..

    [ReactJS] ๋ฐฑ์—์„œ GET method๋ฅผ ํ†ตํ•ด ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹นํ•  ๋•Œ ๊ฐ’์ด ์ฝํ˜€์ง€์ง€ ์•Š๋Š” ๋ฌธ์ œ - Uncaught TypeError: Cannot read properties of undefined (reading '0')

    ๐Ÿšจ ๋ฌธ์ œ ์ƒํ™ฉ ํŒ€ ํ”„๋กœ์ ํŠธ ์ค‘ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜์—ฌ ๋ฐ›์€ ํ›„, ์ด ์ •๋ณด๋ฅผ ๊ฐ€๊ณตํ•ด์„œ ํ™”๋ฉด์— ๋ Œ๋”๋งํ•ด์ฃผ๋Š” ์ž‘์—…์ด ์—ฌ๋Ÿฌ ๋ฒˆ ์žˆ์—ˆ๋‹ค. ์ด ๋•Œ ์ž์ฃผ ๊ณจ์น˜๋ฅผ ์•„ํ”„๊ฒŒ ํ–ˆ๋˜ ์—๋Ÿฌ๊ฐ€ ํ•˜๋‚˜ ์žˆ์–ด ํฌ์ŠคํŠธ๋กœ ๋‚จ๊ธด๋‹ค. const ReservationPage = () => { const [lectureData, setLectureData] = useState({}); // ๋ฐฑ์—์„œ ์ƒํ’ˆ ๋””ํ…Œ์ผ ๋ฐ์ดํ„ฐ ์ˆ˜์‹  useEffect(() => { fetch(`/data/reservationData.json`, { method: 'GET', }) .then(response => response.json()) .then(data => { setLectureData(data); }); }, []); if (lectureData..

    [ReactJS] setState์˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋กœ ์ธํ•œ ๋ฒ„๊ทธ ํ•ด๊ฒฐํ•˜๊ธฐ

    [ReactJS] setState์˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋กœ ์ธํ•œ ๋ฒ„๊ทธ ํ•ด๊ฒฐํ•˜๊ธฐ

    ๐Ÿšจ ๋ฌธ์ œ ์ƒํ™ฉ setState๋ฅผ ํ†ตํ•ด ์ƒํƒœ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋‹ˆ ์›ํ•˜๋Š” ๊ฐ’์ด ํ•˜๋‚˜์”ฉ ๋ฐ€๋ฆฐ ์ฑ„ ๋ณ€๊ฒฝ๋˜๋Š” ๋ฐ”๋žŒ์— ๋‚˜์˜ ์˜๋„๋Œ€๋กœ ์ฝ”๋“œ๊ฐ€ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค. function handleBtnActivateById(event) { setIdValue(event.target.value); console.log(idValue); isIdVaild = idValue.indexOf('@') !== -1 ? true : false; handleBtnActivate(event); } ์œ„์˜ ์‚ฌ์ง„์ฒ˜๋Ÿผ, ์ž…๋ ฅ์ฐฝ์— ์ž…๋ ฅ๋œ ๊ฐ’์ด (์ฝ˜์†”์ฐฝ์—์„œ) ํ•œ ๊ธ€์ž์”ฉ ๋œ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๐Ÿ’ก ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐ ๊ณผ์ • ๊ตฌ๊ธ€๋ง์˜ ํ†ตํ•ด ์•Œ์•„๋ณด๋‹ˆ, setState์˜ Batch Update๋ผ๋Š” ๋น„๋™๊ธฐ์  ํŠน์„ฑ์œผ๋กœ ์ธํ•ด ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋Š” ๊ฒƒ์ž„์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค..

    [ReactJS] React์—์„œ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ , event ๊ฐ์ฒด๋ฅผ ํ™œ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ 

    [ReactJS] React์—์„œ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ , event ๊ฐ์ฒด๋ฅผ ํ™œ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ 

    ๐Ÿšจ ๋ฌธ์ œ ์ƒํ™ฉ React์—์„œ ํŠน์ • ์š”์†Œ์— ์ด๋ฒคํŠธ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ , event ๊ฐ์ฒด๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์œ„์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์˜€๋‹ค. ํ•˜์ง€๋งŒ 'event is deprecated'๋ผ๋Š” ์ดํ•ดํ•  ์ˆ˜ ์—†๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๊ณ  ์ฝ”๋“œ ์—ญ์‹œ ์‹คํ–‰๋˜์ง€ ์•Š์•˜๋‹ค. ๐Ÿ’ก ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐ ๊ณผ์ • ๋ฐ”๋‹๋ผ JS์—์„œ ํŠน์ • ์š”์†Œ์— ์ด๋ฒคํŠธ๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๋ ค๋ฉด ์šฐ์„  ํ•ด๋‹น ์š”์†Œ์— ํ•ด๋‹นํ•˜๋Š” DOM ๊ฐ์ฒด๋ฅผ DOM ํŠธ๋ฆฌ์—์„œ ์ฐพ์•„์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๊ณ  ๋‚œ ํ›„, ์ด ๊ฐ์ฒด์— ์›ํ•˜๋Š” ์ด๋ฒคํŠธ๋ฅผ addEventListener ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ํ˜น์€ ์ธ๋ผ์ธ ๋ฐฉ์‹์œผ๋กœ ํŠน์ • ์š”์†Œ์— ํ•ด๋‹นํ•˜๋Š” HTML ํƒœ๊ทธ์— ์ด๋ฒคํŠธ ์†์„ฑ์„ ๋ฐ”๋กœ ๋ถ€์—ฌํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค. React์—์„œ ํŠน์ • ์š”์†Œ์— ์ด๋ฒคํŠธ๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๋ ค๋ฉด ๋ฐ”๋‹๋ผ JS์—์„œ์˜ ์ธ๋ผ์ธ ๋ฐฉ์‹์ฒ˜๋Ÿผ JSX๋กœ ๋ณ€ํ™˜๋œ ์ฝ”๋“œ์˜ ํƒœ..

    [ReactJS] React๋กœ ์š”์†Œ์— ํด๋ž˜์Šค ์ถ”๊ฐ€ ๋ฐ ์ œ๊ฑฐํ•˜๊ธฐ (๋ถ€์ œ : React์—์„œ ์ง์ ‘ DOM์„ ์กฐ์ž‘ํ•˜์ง€ ์•Š๋„๋ก ํ•˜์ž)

    ๐Ÿšจ ๋ฌธ์ œ ์ƒํ™ฉ ์ธ์Šคํƒ€๊ทธ๋žจ์„ ํด๋ก  ์ฝ”๋”ฉํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฐ”๋‹๋ผ JS๋กœ DOM ์š”์†Œ์— ์ ‘๊ทผํ•œ ํ›„ ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ œ๊ฑฐํ•˜๋Š” ๋ฐ classList์˜ add, remove ๋ฉ”์†Œ๋“œ๋ฅผ ํ™œ์šฉํ•˜์˜€๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ์ฝ”๋“œ๋ฅผ React๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์—์„œ๋„ classList๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜์˜€๋”๋‹ˆ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ console.log()๋ฅผ ํ†ตํ•ด React์—์„œ๋„ classList ํ•จ์ˆ˜๊ฐ€ ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜๋Š” ์ง€ ํ•œ ๋ฒˆ ์‹คํ—˜ํ•ด๋ณด์•˜๋Š”๋ฐ, ํด๋ž˜์Šค๊ฐ€ ์ œ๋Œ€๋กœ ์ œ๊ฑฐ๋˜๊ณ  ์ถ”๊ฐ€๋จ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜๋Š” ์ฝ”๋“œ์™€ ๋‹ฌ๋ฆฌ ํ™”๋ฉด์— ๋ณด์ด๋Š” ๊ฒฐ๊ณผ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์•˜๋‹ค. (๋Œ€์ƒ์ด ๋˜๋Š” ํด๋ž˜์Šค๊ฐ€ opacity: 0.6 ์Šคํƒ€์ผ ์†์„ฑ์ด ๋ถ€์—ฌ๋œ ํด๋ž˜์Šค๋ผ, ๊ฒฐ๊ณผ๋ฅผ ํ™”๋ฉด์—์„œ ๋ฐ”๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์ด์—ˆ๋‹ค.) // SyLogi..