๐ Front-End/React.js
https://jsonplaceholder.typicode.com/ ์ ์ฌ์ฉ ๋ฌด๋ฃ๋ก API ์๋น์ค๋ฅผ ์ ๊ณตํด์ Test ๋ฅผ ํ ์ ์์ต๋๋ค ์ฌ์ฉ์๊ฐ ์ด๋ค API ๋ก ์์์ ๊ฐ์ ธ๋ค ์ธ ์ ์๋์ง ๋ชฉ๋ก ์ฌ๊ธฐ์๋ /comments ์ฌ์ฉ API ๋ฅผ ํธ์ถํ๋ ค๋ฉด ํด๋น API์ ์ฃผ์๋ฅผ ์์์ผ ํ๋๋ฐ ์์ ๋ฆฌ์์ค๋ฅผ ํด๋ฆญํ๊ณ ๋ค์ด๊ฐ URL ์
๋๋ค. ( https://jsonplaceholder.typicode.com/comments ) โ App.js ํธ์ถํ๋ ์์ : App.js ์ปดํฌ๋ํธ๊ฐ Mount ํ๋ฉด ํธ์ถ function App() { const getData = async () => { const res = await fetch( 'https://jsonplaceholder.typicode.com/comments..
๐ Front-End/React.js
ํจ์ํ ์ปดํฌ๋ํธ์์ useEffect ๋ฅผ ์ด์ฉํด์ Lifecycle ๋ฅผ ๊ด๋ฆฌ ํ ์ ์์ต๋๋ค. โ ์ฌ์ฉ๋ฒ import React, { useEffect } from "react"; useEffect ๋ฅผ ์ฌ์ฉ ํฉ๋๋ค. 2๊ฐ์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ๋ฌํ๊ฒ ๋๋๋ฐ 1. callback ํจ์, 2. ์์กด์ฑ ๋ฐฐ์ด ์ ์ ๋ฌ ํฉ๋๋ค. ์์กด์ฑ ๋ฐฐ์ด์ ๋์ค๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํฉ๋๋ค. ์์กด์ฑ ๋ฐฐ์ด์ ๋ค์ด์๋ ๊ฐ ์ค ํ๋๋ผ๋ ๋ณํํ๋ฉด, ์ฒซ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ์ธ ์ฝ๋ฐฑ ํจ์๊ฐ ๋ค์ ์ํ ์์ โ Lifecycle.js import React, { useEffect, useState } from 'react'; const Lifecycle = () => { const [count, setCount] = useState(0); const [text,..
๐ Front-End/React.js
React ์ ์๋ช
์ฃผ๊ธฐ Lifecycle โ ์์ ์ฃผ๊ธฐ ( Lifecycle ) ์ผ๋ฐ์ ์ผ๋ก ์๊ฐ์ ํ๋ฆ์ ๋ฐ๋ผ, ํ์๋ถํฐ ์ฃฝ์์ ์ด๋ฅด๋ ์๊ฐ์ ๋ฐ๋ฅธ ๋จ๊ณ์ ์ธ ๊ณผ์ ์ถ์ฒ : ๊ตญ๋ฏผ ์์ ์ฒ ์ํํธ์จ์ด ๊ฐ๋ฐ์์๋ Lifecycle ์ด๋ผ๋ ๋จ์ด๊ฐ ๋ง์ด ์ฌ์ฉ ๋๋๋ฐ ํ๋ก๊ทธ๋จ์ด ์คํ๋๊ณ , ์ข
๋ฃ๋๋ ๊ณผ์ ์ ๋ํ๋ด๊ธฐ ์ํด์ ์ฌ์ฉ ํฉ๋๋ค. โ React ์ปดํฌ๋ํธ์ Lifecycle ํ์ : ์ปดํฌ๋ํธ๊ฐ ํ๋ฉด์ ๋ํ๋๋ ๊ฒ ( React ์์ Mount ๋ผ๊ณ ์ง์นญ ) ๋ณํ : state ๊ฐ ๋ฐ๋๊ฑฐ๋, ์
๋ฐ์ดํธ(๋ฆฌ๋ ๋) ๋๊ฑฐ๋ ์ด๋ฐ ๋ณํ๋ค ( Update ) ์ฃฝ์ : ์ปดํฌ๋ํธ๊ฐ ํ๋ฉด์์ ์ฌ๋ผ์ง๊ฒ ๋๋ ๊ฒ ์
๋๋ค. ( React ์์ UnMount ๋ผ๊ณ ์ง์นญ ) ์ฆ, React ์์ ์ ์ํ๊ณ ์ฌ์ฉํ๋ ์ปดํฌ๋ํธ๋ค์ ํ์ ๋ถํฐ ์์ํด..
๐ Front-End/React.js
โ DiaryItem.js ์์ฑ๋๋ ๋ฆฌ์คํธ์ ์์ดํ
์ ๋ฒํผ์ ์ถ๊ฐ const DiaryItem = ({ onRemove, author, content, create_date, emotion, id }) => { const handleRemove = () => { if (window.confirm(`${id}๋ฒ์งธ ์ผ๊ธฐ๋ฅผ ์ญ์ ํ๊ฒ ์ต๋๊น?`)) { onRemove(id); } }; return ( ์์ฑ์ : {author} | ๊ฐ์ ์ ์ : {emotion} {new Date(create_date).toLocaleString()} {content} ์ญ์ ํ๊ธฐ ์์ ํ๊ธฐ ); }; export default DiaryItem; ์ ๋ฐ์ ์ธ ๊ฐ๋
์ฑ์ ๊ณ ๋ คํด ๊ธฐ์กด onRemove ํจ์๋ฅผ return ์์ ๋ฐ๋ก ์ ์ ํ์์ต..
๐ Front-End/React.js
์ถ๊ฐ ํ ๋์ ๋น์ทํ๊ฒ ์์์ data ๋ฅผ ๋ฐ๊ฟ์ผ ํฉ๋๋ค. ์ญ์ ๋ฅผ ํ๋ฉด ์ญ์ ๋ฅผ ํ ๋ฐฐ์ด๋ก data ์ state ๋ฅผ ์
๋ฐ์ดํธ ํด์ผ ํฉ๋๋ค. ์์ โ ์์ฑ๋๋ ๋ฆฌ์คํธ์ ์์ดํ
์ ๋ฒํผ์ ์ถ๊ฐ ( DiaryItem.js ) const DiaryItem = ({ author, content, create_date, emotion, id }) => { return ( ์์ฑ์ : {author} | ๊ฐ์ ์ ์ : {emotion} {new Date(create_date).toLocaleString()} {content} { console.log(id); }} > ์ญ์ ํ๊ธฐ ); }; export default DiaryItem; onClick() ์ด๋ฒคํธ ๊น์ง ๋ง๋ค์ด์ค๋๋ค. ํ์ฌ ์์ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ๊ฐ์ฅ ์ต์ ์์ดํ
์..
๐ Front-End/React.js
React ๋ ๋จ๋ฐฉํฅ์ผ๋ก๋ง ๋ฐ์ดํฐ๊ฐ ํ๋ฆ
๋๋ค. ๋ํ ๊ฐ์ ๋ ๋ฒจ์ ์๋ ์ปดํฌ๋ํธ ๋ ์๋ก ๋ฐ์ดํฐ๋ฅผ ๊ตํ ํ ์ ์์ต๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ ๊ณตํต ๋ถ๋ชจ์์๋ก ๋์ด์ฌ๋ ค์ ํด๊ฒฐ์ ํ ์ ์์ต๋๋ค. โ ๊ตฌ์กฐ ๊ฐ์ ๋ ๋ฒจ์ด๋ผ ํจ์ DiaryEditor ์ DiaryList ์
๋๋ค. ๊ณตํต ๋ถ๋ชจ์ธ App ์ปดํฌ๋ํธ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐฐ์ด ํ์์ state ๋ก ๋ฐ์ต๋๋ค. data state ์ ๊ฐ์ DiaryList ์๊ฒ ์ ๋ฌํ๋ฉด์ ๋ฆฌ์คํธ๋ฅผ ๋ ๋๋ง ํ๊ฒ ํ๊ณ data state ๋ฅผ ๋ณํ ์ํฌ ์ ์๋ ์ํ๋ณํ ํจ์์ธ setData ๋ฅผ DiaryEditor ์๊ฒ props ์ผ๋ก ์ ๋ฌํ๋ฉด ๋ฉ๋๋ค. โ ์๋ฎฌ๋ ์ด์
data state ๋ ๋ฐฐ์ด์ด๊ณ [itme1] ํ๋์ ์์ดํ
์ ๊ฐ์ง๊ณ ์๋ ์ํ ์
๋๋ค. data ๋ฅผ props ๋ก ๋ด๋ ค๋ฐ์ Dia..
๐ Front-End/React.js
๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ๋ฆฌ์คํธ ๋ ๋๋ง์ ํ ์ ์์ต๋๋ค. React ์์ ๋ฐฐ์ด์ ๊ฒ์๊ธ, ๋ฆฌ์คํธ, ํผ๋ ๋ฑ์ ํ์ ํ๋ ๊ฒฝ์ฐ ์์ฃผ ์ฌ์ฉ ๋ฉ๋๋ค. ์์ โ App.js ์์ ๋น ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ์ค๋๋ค. const dummyList ๋ถ๋ถ props ์ ์ฌ์ฉํด์ ํด๋น ์ปดํฌ๋ํธ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ ํฉ๋๋ค. { console.log(diaryList); return ( ์ผ๊ธฐ ๋ฆฌ์คํธ {diaryList.length}๊ฐ์ ์ผ๊ธฐ๊ฐ ์์ต๋๋ค. {diaryList.map((it) => ( // key prop ์ ๋ง๋ค๋ผ๊ณ ์๋ฌ๊ฐ ๋จ๋ ๊ฒฝ์ฐ (ํด๊ฒฐ) ์์ฑ์ : {it.author} ์ผ๊ธฐ : {it.content} ๊ฐ์ : {it.emotion} ์์ฑ ์๊ฐ(ms) : {it.create_date} ))} ); }; export defau..
๐ Front-End/React.js
useRef โ DOM ์์๋ฅผ ์ ๊ทผ ํ ์ ์๋ ๊ธฐ๋ฅ DOM ? HTML๊ณผ JavaScript๋ฅผ ์ด์ด์ฃผ๋ ๊ณต๊ฐ์ผ๋ก, ์์ฑํ HTML์ JavaScript๊ฐ ์ดํดํ ์ ์๋๋ก Object๋ก ๋ณํํ๋ ๊ฒ ์ถ์ฒ : https://www.howdy-mj.me/dom/what-is-dom/ ์ ์ฅ๊ณต๊ฐ (๋ณ์๊ด๋ฆฌ) ๋ก ์ฌ์ฉ ํ ์ ์์ต๋๋ค. 1. DOM ์์์ ์ ๊ทผ ๋ฐ๋๋ผ ์๋ฐ์คํฌ๋ฆฝํธ์ document.querySelector() ์ ๋น์ท ํฉ๋๋ค. ์์๋, ๋ก๊ทธ์ธ ํ๋ฉด์ด ๋์์ ๋ id๋ฅผ ๋ฃ๋ input์ ๊ตณ์ด ํด๋ฆญํ์ง ์์๋ ์๋์ผ๋ก ํฌ์ปค์ค๊ฐ ๋์ด ์๊ฒ ํ ์ ์๊ณ , ์๋ฆฌ๋จผํธ์ ํฌ๊ธฐ๋ ์์์ ๋ณ๊ฒฝํ ๋ ์ฌ์ฉ์ด ๊ฐ๋ฅ ํฉ๋๋ค. 2. ์ ์ฅ ๊ณต๊ฐ ์ ์ฅ๊ณต๊ฐ์ด๋ผ ํ๋ฉด ๋ง์ด ์ฌ์ฉํ๋ state๋ฅผ ์ฌ์ฉ ํฉ๋๋ค. ํ์ง๋ง React..