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์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ก ์ธํ ๋ฒ๊ทธ ํด๊ฒฐํ๊ธฐ](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FczZSjW%2FbtrQqL6u0Es%2Fo7mC4LENEbKCPOGrbTf4a1%2Fimg.png)
[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 ๊ฐ์ฒด๋ฅผ ํ์ฉํ ๋ ์ฃผ์ํด์ผ ํ ์ ](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmKpjK%2FbtrQqKZ4Vmt%2FUHacpwECKpLUFjz7KeaekK%2Fimg.png)
[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..