๋ชฉ๋กDEV_IN/React (11)
let's get IT with DAVINA ๐ป
โ๏ธ ์ฌ์ Knowledge ++ FE ์ํ ๊ด๋ฆฌ redux, mobx, recoil ๋ฑ ๋ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์กด์ฌ ์ํ๋? ์ฃผ์ด์ง ์๊ฐ์ ๋ํด ์์คํ ์ ๋ํ๋ด๋ ๊ฒ์ผ๋ก ์ธ์ ๋ ์ง ๋ณ๊ฒฝ๋ ์ ์์. ์ฆ, ๋ฌธ์์ด, ๋ฐฐ์ด, ๊ฐ์ฒด ๋ฑ์ ํํ๋ก ์์ฉ ํ๋ก๊ทธ๋จ์ ์ ์ฅ๋ ๋ฐ์ดํฐ → ๊ฐ๋ฐ์ ์ ์ฅ์์๋ ๊ด๋ฆฌํด์ผํ๋ ๋ฐ์ดํฐ๋ค ์ํ๊ด๋ฆฌ? ์๊ฐ์ ํ๋ฆ์ ๋ฐ๋ผ ๋ณํํ๋ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ React์์ ๋จ๋ฐฉํฅ ๋ฐ์ธ๋ฉ์ด๋ฏ๋ก props drilling ์ด์๋ ์กด์ฌ (redux, mobx์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ ํด๊ฒฐํ๊ธฐ๋ ํจ) store์ ์ ์ญ์ํ๊ฐ ์ ์ฅ๋๊ณ ๊ด๋ฆฌ๋๋ ๊ณต๊ฐ์ธ๋ฐ redux, redux-saga๋ฐฉ์์ผ๋ก ๋น๋๊ธฐ ์์ฒญ์ ๊ตฌํํ๊ฒ ๋๋ฉด redux ๊ตฌํํ๋ ๋ชจ๋์ APIํต์ ๊ด๋ จ ์ฝ๋๊ฐ ๋๋ถ๋ถ์ด๊ฒ ๋จ ๋น์ทํ ๊ตฌ์กฐ์ API ํต..
1. ๋จผ์ , ํด๋น ๊ธ์ ๋๋ฅด๋ฉด ⊕๋ฒํผ ๋๋ ์ ๋ ๋จ๋ ์ฐฝ์ด ๋์ค๊ฒ ํด์ผ๊ฒ ์ง?! TodoItem.js ํน์ ๊ธ์ ๋๋ฅด๋๊น ์ฌ๊ธฐ์({text}์๋ ๋ถ๋ถ=๊ธ์ ๋๋ ์๋) onClickํจ์ ์ถ๊ฐํด์ค! import React from "react"; import { MdCheckBox, MdCheckBoxOutlineBlank } from "react-icons/md"; import "./TodoItem.css"; const TodoItem = ({ todo, onCheckToggle, onInsertToggle, onChangeSelectedTodo, }) => { const { id, text, checked } = todo; return ( {checked ? ( { onCheckToggle(id); }} ..
CSS ์์ ํ, CRUD์ ์ฒซ๋ฒ ์งธ ๊ธฐ๋ฅ์ธ Create ๊ธฐ๋ฅ ๊ตฌํ์ ๋ค์ด๊ฐ๋ค. ⊕ ๋ฒํผ์ ๋๋ฌ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ํญ๋ชฉ์ ์ถ๊ฐํ๋ ๊ธฐ๋ฅ! TodoInsert.js ๋ฐฐ๊ฒฝ์ ๋ด๋นํด์ฃผ๋ background div์ form์ ํ๋ ๋ฃ์ด์ฃผ๊ธฐ (์ฌ์ฉ์๊ฐ ์ ๋ ฅํ๋ input + ์ ์ถํ๋ button ์์) ์ด๊ฑธ ์ฌ์ฉ์๊ฐ ⊕๋ฒํผ์ ๋๋ฅผ๋๋ง ๋ชจ๋ฌ์ ๋์ฐ๊ณ ์ถ์์์? App.js import React, { useState } from "react"; import { MdAddCircle } from "react-icons/md"; import "./App.css"; import Template from "./components/Template"; import TodoInsert from "./components/Tod..
๋ถํธ์บ ํ๊ฐ ๋๋๊ณ ๋ง์ ์ฌ๋๋ค์ด ๋ ์ฌํ๋๊ณ , ์๋ก์ด ์ธ์ด ๊ธฐ๋ฐ์ผ๋ก, ๋ ์ด๋ ค์ด ์์ค์ ์ถ๊ฐ ํ๋ก์ ํธ๋ฅผ ์งํํ๊ณ ์๋ ๋ฏ ํ์ฌ ๋๋จํด๋ณด์ธ๋ค.. ๋ฌผ๋ก ์ฝ๋ฉ์ด๋๊ฑธ ์ฒ์ ์์ํ์ ๋ "๋"๋ณด๋ค๋ ํ์ฌ์ "๋ด"๊ฐ ๋ ๋ฐ์ ํด์๋ ๋ชจ์ต์ด๊ณ , ๋ถ์ํดํ์ง ๋ง์๊ณ ๋งค์ผ ๋ค์งํ์ง๋ง ๋ ๋ด๊ฐ ๊ธฐ๋ณธ๊ธฐ๊ฐ ์ฌ์ ํ ๋ง์ด ๋ถ์กฑํ๊ตฌ๋๋ฅผ ๊ณ์ ๊นจ๋ฌ์ผ๋ฉฐ ๋ง์ด ์ข์ ํ๋ ์์ฆ์ธ๊ฒ๊ฐ๋ค.. ๊ทธ ์ด๋ค ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ฐ๊ฑด ํ๋์ ํํ์ด์ง๋ฅผ ๋ง๋ค ๋, CRUD๋ฅผ ์ ๋ง ์๋ฒฝํ๊ฒ ์์ฝ๊ฒ ๊ตฌํํ ์ ์๋๊ฐ๋ฅผ ์ค์ค๋ก์๊ฒ ๋ฌผ์ด๋ณธ๋ค๋ฉด ๋๋ฌด๋๋ ๋น์ฐํ NO์๋ค.. ๊ทธ๋์ ๋ ๋ ์ด๋ ต๊ธฐ๋ณด๋จ ๊ธฐ๋ณธ๊ธฐ๋ฅผ ๋ค์ ํ ๋ฒ ๋ฆ๊ณ ์ ํ๋ก์ ํธ ์ ๋ถํธ์บ ํ์์ ๊ณผ์ ๋ก ์คฌ๋ (๋ ์คํจํ๋) Todo App์ ๋ค์ ํ๋ฒ ๋ง๋ค์ด๋ณด๊ณ ์ ์์ํ๋ค. 1. React Component ๋ง๋ค..
About JSX React์์ UI๋ฅผ ๊ตฌ์ฑํ ๋ ์ฌ์ฉํ๋ ๋ฌธ๋ฒ์ผ๋ก, JavaScript๋ฅผ ํ์ฅํ ๋ฌธ๋ฒ (JavaScript XML) ⇒ ์ด ๋ฌธ๋ฒ์ ์ด์ฉํด์ React ์๋ฆฌ๋จผํธ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ๊ทธ๋์ HTML์์๋ฅผ ๋ง๋ค๊ณ , JS๋ฅผ ์ค์ ํ ๋ค, ๋ค์ HTML์ ํด๋น ์ค์ ๋ด์ฉ์ ๋ฐ์ํ๋ค๊ณ ํ๋ค๋ฉด, React JSX๋ JS๋ก ์์๋ฅผ ๋ง๋ค๊ณ ๋ง์ง๋ง์ HTML์ ์ ๋ฐ์ดํธ/๋ฐ์ํด์ค๋๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ ๋ฐ๋ก ์คํํ ์ ์๋ JS์ฝ๋๋ ์๋๋๋ค. “Bable”์ ํตํด JSX๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๋ JS๋ก ์ปดํ์ผ ํ, JS๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ์ฝ๊ณ ํ๋ฉด์ ๋ ๋๋ง ํฉ๋๋ค. DOM ๊ทธ๋ฆฌ๊ณ React JSX CSS&JSX ๋ฌธ๋ฒ๋ง์ ๊ฐ์ง๊ณ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์์ต๋๋ค. ์ฆ, ์ปดํฌ๋ํธ ํ๋๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ํ์ํ ํ์ผ..
React๋ก ๋๋ฒ์ ํ๋ก์ ํธ๋ฅผ ๋ค ์งํํ๋๋ฐ ์ React๋ฅผ ์ผ๋๊ฐ์ ์ด๋ค ์ฅ์ ์ด ์๋์ง ์ค์ค๋ก ์ง๋ฌธ์ ์ ๋๋ก ๋ต๋ ๋ชปํ๋ ๋ด ์์ ์ด ํ์ฌํด์ ๋ง์ ๋ค์ก๊ณ ์ ๋ฆฌ๋ฅผ ๋์ ์ฌ๋ด ๋๋ค๋น..๐ฅ ํญ์ ์ด๊ฑด "์" ์๊ฒผ๊ณ , "์" ๋ง์ ์ฌ๋๋ค์ด ์ฐ๋์ง ์ ๋๋ ์๊ณ ์ฐ์ ๋ค๋น์ใ ใ ใ plz What is React? React๋ ํ๋ก ํธ์ค๋ ๊ฐ๋ฐ์ ์ํ, ํ๋ก ํธ์ค๋ ๊ฐ๋ฐ์ ๋ ์ฝ๊ฒ ๋ง๋ค์ด์ฃผ๋ JavaScript ์คํ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ธฐ์ ์ ๋ถ๋ฅ์ ๋ฐ๋ผ ์ฝ๋๋ฅผ ๋ถ๋ฅํ์ง ์๊ณ , ๊ธฐ๋ฅ๋ณ๋ก ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ๊ธธ ๊ถ์ฅ ๋ฆฌ์กํธ SPA๋ฅผ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ๊ฐ๋ฐํ ์ ์๋๋ก ๋ง๋ค์ด์ง ํด ์ฒด์ธ npx create-react-app@latest ํด๋์ด๋ฆ React์ 3๊ฐ์ง ํน์ง ์ ์ธํ (Declarative) ๋ฆฌ์กํธ๋ ํ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด HTM..
๋ชจ๋ฌ์ฐฝ์ ๋์ฐ๋ฉด, ๋ค๋ฅธ ๋ถ๋ถ์ด ์๋ ๋ซ๊ธฐ ๋ฒํผ โ ์ ๋๋ ์ ๋๋ง ์ฐฝ์ ๋ซ๊ฑฐ๋ ํ๊ธฐ ์ด๋ฏธ์ง์ฒ๋ผ ํํธ ๋ฒํผ์ ๋๋ฅด๋ฉด ํํธ์ ์ํ๋ง ๋ณํ๊ฒ (์ด๋ฏธ์ง ์ ์ฒด๊ฐ ๋๋ฆฌ์ง ์๊ฒ) ํ๊ณ ์ถ์ ๋๊ฐ ์๋ค. ๋ชจ๋ฌ ์ปดํฌ๋ํธ์์ ์ต์์ ๋ถ๋ชจ element์ onClick ์ด๋ฒคํธ๋ก stopPropagation()ํจ์๋ฅผ ๋ฃ์ด์ฃผ๊ณ , ๋ฒํผ element์ onClick ์ด๋ฒคํธ๋ก ๋ซํ ์ ์๊ฒ ์ค์ ํด์ฃผ๋ฉด ๋! return ( {e.stopPropagation()}}> X . . . ); const handleLike = async (id, e) => { e.stopPropagation(); // ๋ก๊ทธ์ธ ์๋ ์, ๋จผ์ ์ก๊ณ ๋ก๊ทธ์ธ if (!isLogin) { dispatch(modalOpen()); return; } return ( ..
์ ๊ฐ? ํ๋ก์ ํธ์ ์ ์๋ ์คํฌ๋กค๋ง ๋ฐฉ์ง์ ๋ํด ์ฌ๋ฌ ๊ฒ์๊ณผ ์ง์ธ์๊ฒ ๋ฌผ์ด๋ณธ ๊ฒฐ๊ณผ.. ์ข ๋ ํจ์จ์ ์ด๊ณ ์ง์ ๋ถํ์ง ์์ ์ฝ๋๋ฅผ ์์๋๋ค. ๋ชจ๋ฌ์ฐฝ์ ๋์ ์ ๋, ์คํฌ๋กค ๋ฐฉ์ง๋ฅผ ํ๊ณ -> ๋ชจ๋ฌ์ฐฝ์ ๋ซ์ผ๋ฉด ๋ค์ ์คํฌ๋กค ํ์ฑํ๋ฅผ ์ํค๋ ค๋ฉด overflow:hidden ์์ฑ์ ์ด์ฉํ๋ฉด ๋๋ค! modal์ฐฝ์ ์ํ๋ฅผ useState๋ก ์ํ๊ฐ์ ์ง์ผ๋ณด๊ณ ๋ชจ๋ฌ์ฐฝ์ด ๋จ๋ฉด, scroll ์ํ๋ฅผ hidden์ผ๋ก ๋นํ์ฑํ์ํค๊ณ ๋ชจ๋ฌ์ฐฝ์ ๋ซ์ผ๋ฉด, hidden์ ๋ค์ ํ์ด์ฃผ๋ unset์์ฑ์ ์ค์ ์คํฌ๋กค์ ๋ค์ ํ์ฑํ์ํจ๋ค. const [modal, setModal] = useState(false); const handleModal = () => { if (modal === false) { setModal(true); documen..