- React๋ฅผ ์ฌ์ฉํด TodoList๋ฅผ ์ง์ ๊ตฌํํฉ๋๋ค.
- styled-component๋ฅผ ์ฌ์ฉํด ์คํ์ผ์ด ์ ์ฉ๋ ์ปดํฌ๋ํธ๋ฅผ ์ฒ์๋ถํฐ ๋ง๋ค ์ ์์ต๋๋ค.
- 2500๊ฐ์ ํ ์ผ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ๋ฉฐ ๋ ๋๋ง ์ง์ฐ ํ์์ ๊ฒช๊ณ ๋ ๋๋ง ์ต์ ํ๋ฅผ ํตํด ์ด๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
- ์ปดํฌ๋ํธ ๊ฐ์ํ๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ฉํ ์ ์์ต๋๋ค.
์์ด์ฝ์ react-icons๋ฅผ ์ฌ์ฉํฉ๋๋ค
MdCheckBoxOutlineBlank,
MdCheckBox,
MdRemoveCircleOutline,
MdAdd
- styled-components ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด style์ ์ ํ์ผํฉ๋๋ค.
- ๐ Link
- Greedy Logo Image๋
/src/asset
์ ์กด์ฌํ๋ฉฐ ์์ด์ฝ์/public
ํด๋์ ์กด์ฌํฉ๋๋ค.
- ์ญ์ /์ถ๊ฐ/์ฒดํฌ ๊ธฐ๋ฅ์ด ์์ด์ผ ํ๋ฉฐ App.js(jsx)์์ ๊ตฌํ๋ฉ๋๋ค.
- todos ๋ฐฐ์ด์ ์ํ๋ก ๊ด๋ฆฌ๋์ด์ผํ๋ฉฐ ๊ทธ ๋ด๋ถ ๊ฐ์ฒด๋ ์๋์ key๊ฐ์ ๊ฐ์ ธ์ผํฉ๋๋ค.
{ id : i, text : `ํ ์ผ${i}`, checked:false, }
ํ๋ฉด์ ๊ฐ์ด๋ฐ์ ์ ๋ ฌ์์ผ์ฃผ๋ฉฐ, ์ฑ ํ์ดํ(์ผ์ ๊ด๋ฆฌ)๋ฅผ ๋ณด์ฌ์ค. children์ผ๋ก ๋ด๋ถ JSX๋ฅผ Props๋ก ๋ฐ์์ ๋ ๋๋งํฉ๋๋ค.
์๋ก์ด ํญ๋ชฉ์ ์
๋ ฅํ๊ณ ์ถ๊ฐํ ์ ์๋ ์ปดํฌ๋ํธ. state๋ฅผ ํตํด์ ์ธํ์ ์ํ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
๊ฐ ํ ์ผ ํญ๋ชฉ์ ๋ํ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ปดํฌ๋ํธ. Todo ๊ฐ์ฒด๋ฅผ props๋ก ๋ฐ์์ ์ํ์ ๋ฐ๋ผ ๋ค๋ฅธ ์คํ์ผ์ UI๋ฅผ ๋ณด์ฌ์ค๋๋ค.
todo๋ฐฐ์ด์ props๋ก ๋ฐ์ ์จ ํ, ์ฌ๋ฌ๊ฐ์ TodoListItem ์ปดํฌ๋ํธ๋ก ๋ณํํ ํ ๋ณด์ฌ์ค๋๋ค.
- Step1์ ์๊ตฌ์ฌํญ ๊ตฌํ์ ์๋ฃํ๋ค๋ฉด ์๋์ createBulkTodos()ํจ์๋ฅผ todos์ํ์ ์ด๊ธฐํํ๋ฉฐ ์ ์ธํด์ฃผ์ธ์.
//App.js function createBulkTodos(){ const array = []; for(let i=1;i<2500;i++) array.push({ id : i, text : `ํ ์ผ${i}`, checked:false, }); } return array; }
2500๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ ๋๋งํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ ค์ง๋๋ค. ์ ๋๋ ค์ง๋์ง ์์ธ์ ๋ถ์ํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ PR์ ์ ์ด์ฃผ์ธ์. ReactDevTools-Profiler๋ฅผ ์ด์ฉํด์ ์ด๋ค ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง๋๋์ง ํ์ธํ๊ณ ์์ธ์ ๋ถ์ํด ์ปดํฌ๋ํธ ๋ ๋๋ง ์ต์ ํ์ ๊ฐ์ํ๋ฅผ ์ด๋ค๋ด๋ณด์ธ์.function App() { const [todos, setTodos] = useState(createBulkTodos()); ...some codes... }
- ์ปดํฌ๋ํธ ์ต์ ํ&๊ฐ์ํ๋ฅผ ์ ์ฉํ๊ธฐ ์ด์ ์ Profiler์ ์คํฌ๋ฆฐ์ท๊ณผ ์ดํ์ ์คํฌ๋ฆฐ์ท์ ์ฐ์ด ๋น๊ตํด์ฃผ์ธ์.
- React.memo
- useMemo
- useCallback
- useRef
- react-virtualized(๊ฐ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ)
- ์งํ ์๊ฐ: 4์ผ ๋ด์ ์๋ฃํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.