Main Concepts ์ฒ์ React๋ฅผ ์์ํ ๋ ๊ฑฐ์ ์ดํด ๋ชปํ๊ณ practice ์ ๋๋ง ์ฐธ์กฐํ์ ๋ฏ ์ถ์ด์ ๋ค์ ์ฝ์ด๋ณด์๋ค. ๊ฐ๋ ์ ์ด๋ฒ์ ๋ช ํํ ํ๋ค๊ฑฐ๋ ์ฒ์ ๋ค์ด๋ณธ ๊ฒ๋ค์ ์ ๋ฆฌํด๋ณด์๋๋ฐ, Main concept์์๋ ๊ฝค๋ ๋ง์๋ค. ์ด๋ฒ ๊ธฐํ๋ก ํด๋น ์ ๋ฆฌ ๊ธ์ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ณด๋๋ก ํด์ผ๊ฒ ๋ค ๐ Introducing JSX React๋ ๊ธฐ์กด์ html, js ์ ๊ฐ์ด ๊ธฐ๋ฅ ๋ณ๋ก ๋ฌธ์๋ฅผ ๋๋๋ ๋ฐ์์ ํ ์ปดํฌ๋ํธ ๋จ์๋ก ๋๋๊ฒ ํจ์ผ๋ก์จ js, html(jsx), css๋ฅผ ์ปดํฌ๋ํธ ๋จ์๋ก ๋ค๋ฃฐ ์ ์๊ฒ ํ์๋ค. JSX์ ๋ด๋ถ์ ๋ณ์๋ค์ ๋ ๋ ์์ ์ ์ด๋ฏธ ๋ฌธ์์ด๋ก ๋ณ๊ฒฝ ๋๋ฏ๋ก XSS ๊ณต๊ฒฉ์ ํผํ ์ ์๋ค. Rendering Elements React๋ก ๋ง๋ค์ด์ง ์ดํ๋ฆฌ์ผ์ด์ ์ ํ๋์ root DOM ๋ ธ๋๋ฅผ ..
๋ฌธ์ ์ํฉ React context ์ฌ์ฉ ์ ๊ธฐ์กด ์ฝ๋ ๊ตฌ์ฑ์ด context ๋ด๋ถ ์์๊ฐ ๋์ด๋ ์๋ก ๋ณต์กํด์ ธ์ ๋ฆฌํฉํ ๋งํ๋ ค ํ๋ค. ๊ธฐ์กด ๊ตฌํ // ๊ตฌ์ฑ const UserContext = createContext({}); const SignInContext = createContextvoid>(()=>{}); export const UserContextProvider = ({ children }) => { const [user, setUser] = useState(); const signIn = () => {}; return ( {children} ); } export function useUserState() { const context = useContext(UserContext); return c..
React-query : fetch, cache, synchronize, update(for server state)์ ์ฌ์ฉ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. ๊ณต์์ฌ์ดํธ React Query Hooks for fetching, caching and updating asynchronous data in React react-query.tanstack.com ๋ฐฐ๊ฒฝ server state ์ฌ์ฉ ์ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ์ ์ ๋ค์๊ณผ ๊ฐ๋ค. caching deduping(๋ฐ์ดํฐ ์ค๋ณต ์ ๊ฑฐ) update "out of date" data / know when is it reflecting updates data pagination optimization, lazy loading data memory management, garba..
query๊ฐ ์ค๋ ๋์๋ค๋ ๊ฒ์ ํ๋จํ๊ณ ๋ค์ fetchํด์ฌ ๋, queryClient.invalidateQueries ํจ์๋ฅผ ์ฌ์ฉํ๋ค. https://react-query.tanstack.com/guides/query-invalidation Query Invalidation Query Invalidation Waiting for queries to become stale before they are fetched again doesn't always work, especially when you know for a fact that a query's data is out of date because of something the user has done. For that purpose, the Quer..
query์ ๋ค๋ฅด๊ฒ CUD์ ์ฌ์ฉ๋๋ค. https://react-query.tanstack.com/guides/mutations Mutations Subscribe to our newsletter The latest TanStack news, articles, and resources, sent to your inbox. react-query.tanstack.com ์ฌ์ฉ์์ const mutation = useMutation(newTodo => axios.post('/todos', newTodo)) return ( {mutation.isLoading ? ( 'Adding todo...' ) : ( {mutation.isError ? ( An error occurred: {mutation.error.mes..
React array state๊ฐ ๊ฐฑ์ ๋์ด๋ view๊ฐ ๋ฐ๋์ง ์์ ๋ const [members, setMembers] = useState([]); const deleteMember = (index: number) => { // member ์ญ์ const tmp = members; tmp.splice(index, 1); setMembers(tmp); } return( { members.map((member: string, index: number) => {member} } ); members๋ผ๋ Array state์ ๊ฐ ํ๋๋ฅผ ์ญ์ ํ๋ ํจ์์ด๋ค. ํด๋น ํจ์๋ฅผ ์คํํด๋ ํ์๋๋ ํ์์ด ๋ณํ์ง ์๋ ์ด์๊ฐ ๋ฐ์ํ๋ค. ํ์ง๋ง ๊ฐ๋ฐ์๋๊ตฌ๋ฅผ ํตํด์ ๋ณด๋ฉด ๋ถ๋ช ํด๋น ์ปดํฌ๋ํธ์ members State๋ ๋ณ๊ฒฝ๋..
React ํ๊ฒฝ๋ณ์ ๋ฑ๋ก ๊ธฐ์กด ๊ฐ๋ฐ ์ ๊ฐ๋ฐ ํ๊ฒฝ์์ React๋ฅผ ํ๋ก ํธ๋ก ์ฌ์ฉํ ๋, ์ฝ๋ ์ฌ์์์ ํ๊ฒฝ๋ณ์๋ฅผ ์ด์ฉํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น? ์ต์์ ํด๋์ .env ํ์ผ์ ๋ง๋ ๋ค. .env ํ์ผ์ REACT_APP์ผ๋ก ์์ํ๋ ํ๊ฒฝ๋ณ์๋ฅผ ์ ์ํ๋ค. REACT_APP_ADMIN_KEY=hi ์ฝ๋ ์์์ process.env.REACT_APP_ADMIN_KEY์ ๊ฐ์ ํํ๋ก ์ฌ์ฉํ๋ค. ์ด๋ ๊ฒ ๊ฐํธํ๊ฒ ์ด์ฉํ ์ ์๋ค! ๋ฐฐํฌ ์ ํ์ง๋ง ์๋น์ค๋ฅผ ์ํ build ํ์๋ ํ๊ฒฝ๋ณ์๋ฅผ ์ฝ์ด๋ค์ผ ์ ์๊ธฐ ๋๋ฌธ์ build์ ๋์์ build์ ๋ํ ๋งค๊ฐ๋ณ์(argument)๋ก ํ๊ฒฝ๋ณ์๋ฅผ ์ธํ ํด์ฃผ์ด์ผํ๋ค. NERA๋ github action์์ docker/build-push-action@v1.1.0 ์ด๋ผ๋ action..
html2canvas + ์ด๋ฏธ์ง ํธ์คํ *์์ ๋ React Hook ํ๊ฒฝ์์ ์งํ๋์์ต๋๋ค. ๊ฒฐ๊ณผ table์ ์ด๋ฏธ์ง๋ก ๋ง๋ค์ด ๊ณต์ ํด์ผํ๋ ์๊ตฌ์ฌํญ์ด ์์๋ค. ์๊ตฌ์ฌํญ์ ์ํํ๊ธฐ ์ํด์๋ ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ๋ฅผ ์์ฐจ์ ์ผ๋ก ํด๋ด์ผํ๋ค. html table์ ์ด๋ฏธ์ง๋ก ๋ง๋ค๊ธฐ ๋ง๋ค์ด์ง ์ด๋ฏธ์ง๋ฅผ ํธ์คํ ํ๊ธฐ ํธ์คํ ๋ ์ด๋ฏธ์ง๋ฅผ ์นด์นด์คํก api๋ฅผ ์ด์ฉํ์ฌ ๊ณต์ ํ๊ธฐ ์ฐจ๋ก๋๋ก ํด๋ณด์. html table์ ์ด๋ฏธ์ง๋ก ๋ง๋ค๊ธฐ DOM์์๋ฅผ ์ด๋ฏธ์ง๋ก ๋ง๋ค ๋, html2canvas๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ฃผ๋ก ์ฐ์ธ๋ค. import html2canvas from 'html2canvas'; const copyDOM = async () => { window.scrollTo(0, 0); let url = ""; await html2canvas(..
Comment