๐ ๋ค์ด๊ฐ๋ฉฐ ์ด๋ฒ ํฌ์คํ ์์๋ React์์ ์ฌ์ฉ๋๋ ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด์ ๊ฐ๊ฐ์ ํน์ง๊ณผ ๊ฐ์ธ์ ์ธ ๊ฒฌํด๊ฐ ๋ค์ด๊ฐ ์์ต๋๋ค. ํ์ฌ ํฌ์คํ ์์ ๋ค๋ฃฐ ์ฃผ์ ๋ค ๊ฐ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. react-redux & redux-toolkit recoil zustand jotai React์์ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจ๊ป ๊ฐ๋ฐ์ ํ๋ค ๋ณด๋ฉด ์์์ ์ธ๊ธํ ๋ค ๊ฐ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค ํ๋์ฏค์ ๋ถ๋ช ์๊ณ ๊ณ์๋ฆฌ๋ผ ์๊ฐํฉ๋๋ค. ์ ์ด๋ฏธ์ง๋ ์ต๊ทผ 1๋ ๊ฐ ๋ค ๊ฐ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ NPM ๋ํฅ์ ๋๋ค. ํ์ฌ ์ถ์ธ๋ก ๋ดค์ ๋ 1์: redux (react-redux & redux-tookit) 2์: zustand 3์: jotai 4์: recoil ์ ์์๋ก ๋ณด์ ๋๋ค. ๊ทธ๋ผ ๊ฐ๋จํ ์ฝ๋ ์์ ์ ํจ๊ป ํน์ง์ ์์๋ณด๊ฒ ์ต๋๋ค. Redux..
๐ ๋ค์ด๊ฐ๋ฉฐ ๋ฆฌ์กํธ๊ฐ ๋ฐ์ด๋ ์ฑ๋ฅ์ ๋ณด์ฌ์ค ์ ์๋ ๋น๊ฒฐ ์ค ํ๋๋ ๋ฐ๋ก ๊ฐ์ ๋(Virtual DOM)์ ๋๋ค. ์ด๋ ๋ฆฌ์กํธ์ ํต์ฌ ๊ฐ๋ ์ค ํ๋๋ก ๊ฐ์ ๋์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. DOM(Document Object Model) ์น ์ฌ์ดํธ์ ์ ์ํ๋ฉด ๋ณด์ด๋ ๊ฐ๊ฐ์ ์์(Element)๋ค์ด ๋ชจ์ฌ ํ๋์ ๋ฌธ์(Document)๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ์ด๋ฌํ ๋ฌธ์์ ๊ตฌ์กฐ๋ฅผ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ์ดํดํ ์ ์๋๋ก ํํํ ๊ฒ์ด ๋ฐ๋ก DOM์ ๋๋ค. DOM์ ์์๋ค์ ํธ๋ฆฌ(Tree) ํํ๋ก ํํํ๋ฉฐ, ๊ฐ ์์์ ํด๋นํ๋ ๋ ธ๋(Node)๊ฐ ์กด์ฌํฉ๋๋ค. ๊ฐ๋ฐ์๋ค์ DOM์ด ์ ๊ณตํ๋ API๋ฅผ ์ด์ฉํด ์ด๋ฌํ DOM ๊ตฌ์กฐ์ ์ ๊ทผํ๊ณ , ๋ด์ฉ์ด๋ ์คํ์ผ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์ด๋ฐ ๊ณผ์ ์ DOM ์กฐ์์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ํ์ง๋ง ์๋ฅผ ๋ค์ด, ์น ..
๐ ๋ค์ด๊ฐ๋ฉฐ ํจ์ ์ปดํฌ๋ํธ ๋์ ๋ฆฌ์กํธ์์ ํจ์ ์ปดํฌ๋ํธ๋ ๋ฆฌ์กํธ๊ฐ ์ฒ์ ์๊ฒผ์ ๋๋ถํฐ ์์์ง๋ง, ์ฒ์์๋ ์ํ๊ด๋ฆฌ๋ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ด์ ์ฃผ๋ก ๋จ์ํ ํํ์ ์ํ ์ฉ๋๋ก ์ฌ์ฉ๋์์ต๋๋ค. ํ์ง๋ง, ๋ฆฌ์กํธ 16.8 ๋ฒ์ ์์ Hooks๊ฐ ๋์ ๋๋ฉด์ ํจ์ ์ปดํฌ๋ํธ์์๋ ์ํ๊ด๋ฆฌ์ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋์ ์ ์ฌํ ๊ธฐ๋ฅ์ ํ์ฉํ ์ ์๊ฒ ๋์์ต๋๋ค. Hooks์ ๋์ ์ ํจ์ ์ปดํฌ๋ํธ์ ํ์ฉ ๋ฒ์๋ฅผ ํฌ๊ฒ ํ์ฅ์ํค๊ณ , ํ์ฌ๋ ํจ์ ์ปดํฌ๋ํธ๋ง์ผ๋ก๋ ๋๋ถ๋ถ์ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์๊ฒ ๋์๊ณ , ๊ทธ ๊ฒฐ๊ณผ ํจ์ ์ปดํฌ๋ํธ์ ์ฌ์ฉ์ด ํฌ๊ฒ ๋์์ต๋๋ค. ์ค์ ๋ก ๋ฆฌ์กํธ ๊ณต์๋ฌธ์์์๋ ํด๋์ค ์ปดํฌ๋ํธ๋ณด๋ค ํจ์ ์ปดํฌ๋ํธ๋ก ์์ฑํ๋ ๊ฒ์ ๊ถ์ฅํ๊ณ ์์ต๋๋ค. ํจ์ํ(Functional)์ด ์๋๋ผ ํจ์(Function) ์ปดํฌ๋ํธ๋ผ๊ณ ๋ถ๋ฅด..
๐ ๋ค์ด๊ฐ๋ฉฐ ์ด์ ๊ธ React.memo ๊ธ์์ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ํจ์๋ฅผ props๋ก ๋ฐ์ ๋ ํด๊ฒฐํ ์ ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ useCallback์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค. useCallback์ด๋ โ ๋จผ์ React์์ useCallback์ ๋ฆฌ๋ ๋๋ง ์ฌ์ด์ ํจ์ ์ ์๋ฅผ ์บ์ ํ ์ ์๊ฒ ํด์ฃผ๋ React ํ ์ ๋๋ค. ์ฆ, useCallback ํ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ปดํฌ๋ํธ ์คํ ์ ๋ฐ์ ๊ฑธ์ณ ํจ์๋ฅผ ์ ์ฅํ ์ ์๊ฒ ํ๋ ํ ์ผ๋ก React์ ํจ์๋ฅผ ์บ์ฑํ๊ณ ๋งค ์คํ๋ง๋ค ํด๋น ํจ์๋ฅผ ์ฌ์์ฑ๋๋ ์ํฉ์ ๋ง์ ์ ์์ต๋๋ค. ์ฌ์ฉ ๋ฐฉ๋ฒ ์บ์ฑํ๋ ค๋ ํจ์๋ฅผ useCallback์ผ๋ก ๋ํ ํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. // Button.js const Button = ({ onClick }) => { console.log('..
๐ ๋ค์ด๊ฐ๋ฉฐ React์์ ์ฑ๋ฅ์ ์ต์ ํํ๊ธฐ ์ํด ์ฌ์ฉํ ์ ์๋ React.memo์ ๋ํด ์๊ฐํ๊ณ , ๊ธฐ๋ฅ์ ์ด๋ค ์ํฉ์์ ์ ์ฌ์ฉํ๊ณ ๋์์๋ฆฌ์ ์ฌ์ฉ ์์ ์ฝ๋๋ ํจ๊ป ์์๋ณด๊ฒ ์ต๋๋ค. React.memo๋ โ memo๋ฅผ ์ฌ์ฉํ๋ฉด ํด๋น ์ปดํฌ๋ํธ์ props๊ฐ ๋ณ๊ฒฝ๋์ง ์์ ๊ฒฝ์ฐ ๋ฆฌ๋ ๋๋ง์ ๊ฑด๋๋ธ ์ ์์ต๋๋ค. ์ฆ, ๋ฉ๋ชจํ๋ ๋ฒ์ ์ ์ปดํฌ๋ํธ๋ก ํด๋น ์ปดํฌ๋ํธ์ props๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง ๋ฆฌ๋ ๋๋ง์ ํ ์ ์์ต๋๋ค. ์ปค๋ค๋ ํ๋ชจ์ ์ปดํฌ๋ํธ๋ ๋ณต์กํ ์ํฉ์์ ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ ๋ง์ ์ฑ๋ฅ์ ์ต์ ํํ ์ ์์ต๋๋ค. ๋์ ์๋ฆฌ ๐ก React.memo๋ ์ธ์๋ก ๋ค์ด๊ฐ ์ปดํฌ๋ํธ์ ์ด๋ค props๊ฐ ์ ๋ ฅ๋๋์ง ํ์ธํ๊ณ ์ ๋ ฅ๋๋ ๋ชจ๋ props์ ์ ๊ท ๊ฐ์ ํ์ธํ ๋ค ์ด๋ฅผ ๊ธฐ์กด์ props์ ๊ฐ๊ณผ ๋น๊ตํ๋๋ก ๋ฆฌ์กํธ์๊ฒ ์ ..
๐ ๋ค์ด๊ฐ๋ฉฐ React์์ ํ๋ฉด (DOM)๋ฅผ ์บก์ฒ, ์ ์ฅํ๋ ๊ธฐ๋ฅ์ ๋ํด์ ์์๋ณด๋ ค ํฉ๋๋ค. ์์ ํ ์ด ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ ์ฌ๋ฌ๊ฐ์ง ๋ฌธ์ ๋ฅผ ๋ง์ด ํ์๋๋ฐ, ๊ฒฐ๊ณผ์ ์ผ๋ก ์ฑ๊ณตํ ๋ฐฉ๋ฒ๋ค๋ก ํฌ์คํ ํ๊ฒ ๋ฉ๋๋ค. ์บก์ณ(์คํฌ๋ฆฐ์ท)์ ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค ๋ํ์ ์ผ๋ก html2canvas, dom-to-image, html-to-image ๋ฑ์ด ์์ต๋๋ค. ๊ธฐ๋ฅ์ ๊ตฌํํ๋ฉด์ html2canvas์ dom-to-image๋ฅผ ๋ชจ๋ ์ฌ์ฉํด ๋ดค์ต๋๋ค. ์ ๊ฐ ์ฌ์ฉํด ๋ณธ ๋ ๊ฐ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด์๋ ์ผ๋ฐ์ ์ผ๋ก ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชจ๋ ์์ญ์ ์ ํํ๊ฒ ์บก์ฒํ๊ณ DOM ์์์ ์ ์ฉ๋ CSS ์คํ์ผ์ ์บก์ฒํ๋ ๋ฐ ํฐ ๋ฌธ์ ๋ ์์์ต๋๋ค. ๊ทธ๋ฌ๋ dom-to-image๊ฐ html2canvas๋ณด๋ค ๋ ๋น ๋ฅด๊ณ ์์ ์ ์ด๋ผ๊ณ ํ๋ ์ฌ์ฉ์๋ ์๋ค๊ณ ํฉ๋๋ค..
๐ ๋ค์ด๊ฐ๋ฉฐ ์ต๊ทผ React Native + TypeScript ๋ก ๊ฐ๋จํ ์ดํ์ ๋ง๋ค๋ฉด์ ๊ณต๋ถํ๋ ๋์ค์ ํ๊ฒฝ ๋ณ์ (env)๋ฅผ ์ ์ฉ์ด ํ์ํ๋๋ฐ, ๊ทธ๋ฅ React์์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๊ณผ ์กฐ๊ธ ๋ค๋ฅธ ๊ฒ ๊ฐ์์ ์์ํ์ต๋๋ค. 1. react-native-dotenv react-native-dotenv๋ React Native ํ๊ฒฝ์์ ํ๊ฒฝ๋ณ์(env)๋ฅผ ์ ์ฉํ ์ ์์ต๋๋ค. ํฐ๋ฏธ๋์ ์ผ๊ณ ํด๋น ๋ช ๋ น์ด๋ฅผ ํตํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํฉ๋๋ค. npm i react-native-dotenv ๋๋ yarn add react-native-dotenv ๊ทธ๋ฆฌ๊ณ ํ์ ์คํฌ๋ฆฝํธ ํ๊ฒฝ์์๋ ์ถ๊ฐ๋ก types๋ฅผ ์ค์นํด ์ค์ผ ํ์ ์คํฌ๋ฆฝํธ ํ๊ฒฝ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. npm install -D @types/react-native-dote..
๐ ๋ค์ด๊ฐ๋ฉฐ ์ต๊ทผ 'ํด๋ฆฐ ์ฝ๋'์ฑ ๊ณผ ์ฌ๋ฌ ๊ฐ๋ฐ ๊ด๋ จ ์์์ด๋ ๋ฌธ์๋ฅผ ๋ณด๊ณ ํ ์คํธ ์ฝ๋์ ์ค์์ฑ์ ๊นจ๋ซ๊ฒ ๋์๋ค. ์์ผ๋ก ๊ฐ๋ฐ์ ํ๋ฉด์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด์ ํ ์คํธ ์ฝ๋๋ฅผ ๋จผ์ ์์ฑํ๊ณ ํ ์คํธ ์ฝ๋๋ฅผ ํต๊ณผํ๊ธฐ ์ํ ์ฝ๋๋ฅผ ์์ฑํ๋ TDD ๊ฐ๋ฐ ๋ฐฉ์์ผ๋ก React์์ Jest์ React testing library๋ก ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฒ์ ๊ณต๋ถํ๊ฒ ๋์๋ค. ๊ณต๋ถํ ๋ด์ฉ์ ๋ณต์ตํ๊ณ ์ ๋ฆฌํ๊ธฐ ์ํด ๊ธ์ ์์ฑํด ๋ณธ๋ค. ํด๋น ๊ธ์์๋ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์ซ์๊ฐ ์ฆ๊ฐ๋๋ ๊ฐ๋จํ ์ฑ์ TDD ๊ฐ๋ฐ ๋ฐฉ์์ผ๋ก ํ ์คํธํ๊ณ ๋ง๋ค์ด ๋ณผ ๊ฒ์ด๋ค. Jest์ React testing library Jest ? Jest๋ ๊ฐ๋ฐ์๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์ ์คํฌ๋ฆฝํธ ์ฝ๋์ ๋ํ ํ ์คํธ๋ฅผ ์คํํ ์ ์๋๋ก ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ ์คํธ..
๐ ๋ค์ด๊ฐ๋ฉฐ React + Typescript ํ๊ฒฝ์์ React Testing library์ jest๋ฅผ ์ด์ฉํด์ ํ ์คํธ ์ฝ๋ ์์ฑ์ ๋ํด์ ๊ณต๋ถํ๋ ค๋ ๋์ค์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ณ , ๊ฒฐ๊ณผ์ ์ผ๋ก ํด๊ฒฐํ๊ธฐ ์ํด ํด์ผ ํ ๊ฒ์ ๋ณ ๊ฑฐ ์๋์์ง๋ง ํ๋ค๊ฒ(?) ํด๊ฒฐ ๋ฐฉ์์ ์ฐพ์์ ๊ธฐ๋ก์ ํด๋๋ ค๊ณ ํ๋ค. 1. ๋ฌธ์ ๋ฐ์ CRA typescript๋ก ํจํค์ง๋ค์ ์ค์นํ๊ณ ๋ ํ์ npm test ๋ช ๋ น์ด๋ฅผ ํตํด์ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ฑ๋์ด ์๋ ํ ์คํธ ์ฝ๋๋ค์ด ์ ์คํ์ด ๋๋์ง ํ์ธ์ ํด๋ดค๋ค. ํ์ง๋ง ReactDOM.render is no longer supported in React 18 ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ํ ์คํธ ์ฝ๋ ์์ฒด๋ PASS๊ฐ ๋๋ฉด์ ์ ์คํ์ด ๋์์ง๋ง ์์ ๊ฐ์ ์ค๋ฅ ๋ฉ์์ง๊ฐ ๋งค์ฐ ์ ๊ฒฝ ์ฐ์๋ค. 2. ๋ฐ์ ์์ธ Rea..