ALL (119) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ ๋ฆฌ๋์ค(Redux)์ ๋ํด ์์๋ณด์ ๋ฆฌ๋์ค(Redux) ์ปดํฌ๋ํธ๋ค์ ์ํ ๊ด๋ จ ๋ก์ง๋ค์ ๋ค๋ฅธ ํ์ผ๋ค๋ก ๋ถ๋ฆฌ์์ผ ๋์ฑ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌ ๊ธ๋ก๋ฒ ์ํ ๊ด๋ฆฌ => Context API, useReducer์ ์ ์ฌ ๋ฆฌ๋์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ Context API๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ฐจ์ด ๋ฆฌ๋์ค๋,,, ๋ฏธ๋ค์จ์ด ์ ์ฉํ ํจ์(connect)์ Hooks(useSelector, useDispatch, useStore) ํ๋์ ์ปค๋ค๋ ์ํ (๋ชจ๋ ๊ธ๋ก๋ฒ ์ํ๋ฅผ ํ๋์ ์ปค๋ค๋ ์ํ ๊ฐ์ฒด์ ๋ฃ์ด ์ฌ์ฉ) concat: ๋ฆฌ๋์ค์ ์ํ ๋๋ ์ก์ ์์ฑ ํจ์๋ฅผ ์ปดํฌ๋ํธ์ props๋ก ๋ฐ์์ฌ ์ ์๋ค. useSelector, useDispatch, useStore: ์์ฝ๊ฒ ์ํ๋ฅผ ์กฐํํ๊ฑฐ๋ ์ก์ ์ ๋์คํจ์น ํ ์ ์๋ค. ๋ฆฌ๋์ค๋ ์ธ์ ์จ์ผ ํ ๊น? ํ๋ก์ ํธ์ ๊ท๋ชจ๊ฐ ํฐ๊ฐ? Y.. React ๊ณต๋ถํ๊ธฐ(5) - ๋ฆฌ์กํธ ๋ผ์ฐํฐ react-router๋ฅผ ํตํ ๋ฆฌ์กํธ ์ฑ๊ธ ํ์ด์ง ์ดํ๋ฆฌ์ผ์ด์ ๋ง๋ค๊ธฐ 1. ๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ๋ฒ $ yarn add react-router-dom ํ๋ก์ ํธ์ ๋ผ์ฐํฐ ์ ์ฉ import React from 'react'; import ReactDOM from 'react-dom'; import { BrowserRouter } from 'react-router-dom'; // * BrowserRouter ๋ถ๋ฌ์ค๊ธฐ import './index.css'; import App from './App'; import * as serviceWorker from './serviceWorker'; // * App ์ BrowserRouter ๋ก ๊ฐ์ธ๊ธฐ ReactDOM.render( , document.getElementById(.. React ๊ณต๋ถํ๊ธฐ(4) - API ์ฐ๋ํ๊ธฐ 1. API ์ฐ๋์ ๊ธฐ๋ณธ $ yarn add axios GET: ๋ฐ์ดํฐ ์กฐํ POST: ๋ฐ์ดํฐ ๋ฑ๋ก PUT: ๋ฐ์ดํฐ ์์ DELETE: ๋ฐ์ดํฐ ์ ๊ฑฐ import axios from 'axios'; axios.get('/users/1'); axios.get('https://jsonplaceholder.typicode.com/users'); axios.post('/users', { username: 'blabla', name: 'blabla' }); useState์ useEffect๋ก ๋ฐ์ดํฐ ๋ก๋ฉํ๊ธฐ useState: ์์ฒญ ์ํ ๊ด๋ฆฌ ์์ฒญ์ ๊ฒฐ๊ณผ ๋ก๋ฉ ์ํ ์๋ฌ useEffect: ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋๋ ์์ ์ ์์ฒญ์ ์์ import React, { useState, useEffect } from 'rea.. React ๊ณต๋ถํ๊ธฐ(2) - styled-components ๐ ๋ฒจ๋กํผํธ์ ํจ๊ปํ๋ ๋ชจ๋ ๋ฆฌ์กํธ CSS in JS $ yarn add styled-components import styled from 'styled-components' [polished์ ์คํ์ผ ๊ด๋ จ ์ ํธ ํจ์ ์ฌ์ฉํ๊ธฐ] lighten() darken() $ yarn add polished import { darken, lighten } from 'polished'; import React from 'react'; import styled from 'styled-components'; import { darken, lighten } from 'polished'; const StyledButton = styled.button` /* ๊ณตํต ์คํ์ผ */ display: inline-flex; outli.. React ๊ณต๋ถํ๊ธฐ(2) - CSS Module ๐ถ ๋ฒจ๋กํผํธ์ ํจ๊ปํ๋ ๋ชจ๋ ๋ฆฌ์กํธ ํ์ฅ์ : .module.css ํด๋์ค ์ด๋ฆ์ ๋ํ์ฌ ๊ณ ์ ํ ์ด๋ฆ๋ค์ด ๋ง๋ค์ด์ง๊ธฐ ๋๋ฌธ์, ์ค์๋ก CSS ํด๋์ค ์ด๋ฆ์ด ๋ค๋ฅธ ๊ด๊ณ ์๋ ๊ณณ์์ ์ฌ์ฉํ CSS ํด๋์ค ์ด๋ฆ๊ณผ ์ค๋ณต๋๋ ์ผ์ ๋ํ์ฌ ๊ฑฑ์ ํ ํ์๊ฐ ์๋ค. * classnames ์ฌ์ฉ ์ ํ ์ import React from 'react'; import { MdCheckBox, MdCheckBoxOutlineBlank } from 'react-icons/md'; import styles from './CheckBox.module.css'; function CheckBox({ children, checked, ...rest }) { return ( {checked ? ( ) : ( )} {children} ); .. React ๊ณต๋ถํ๊ธฐ(2) - Sass ๐ ๋ฒจ๋กํผํธ์ ํจ๊ปํ๋ ๋ชจ๋ ๋ฆฌ์กํธ Syntactically Awesome Style Sheets ! ํ์ฅ์ : .scss / .sass $ yarn add sass sass $font-stack: Helvetica, sans-serif $primary-color: #333 body font: 100% $font-stack color: $primary-color scss $font-stack: Helvetica, sans-serif; $primary-color: #333; body { font: 100% $font-stack; color: $primary-color; } [classnames] $ yarn add classnames import classNames from 'classnames'; imp.. React ๊ณต๋ถํ๊ธฐ(1) - Hooks ์ข ๋ฅํธ ๐น ๋ฒจ๋กํผํธ์ ํจ๊ปํ๋ ๋ชจ๋ ๋ฆฌ์กํธ ~ for ์ฑ๋ฅ ์ต์ ํ ~ useMemo : ์ฐ์ฐํ ๊ฐ ์ฌ์ฌ์ฉ useCallback : ํจ์ ์ฌ์ฌ์ฉ React.memo : ์ปดํฌ๋ํธ ๋ฆฌ๋ ๋๋ง ๋ฐฉ์ง 7. useState๋ฅผ ํตํด ์ปดํฌ๋ํธ์์ ๋ฐ๋๋ ๊ฐ ๊ด๋ฆฌํ๊ธฐ import React, { useState } from 'react'; const [number, setNumber] = useState(0); ์ํ์ ๊ธฐ๋ณธ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ก ๋ฃ์ด์ ํธ์ถ ํธ์ถํ๋ฉด ๋ฐฐ์ด์ด ๋ฐํ, ์ฒซ๋ฒ์งธ ์์๋ ํ์ฌ ์ํ, ๋๋ฒ์งธ ์์๋ Setter ํจ์ 11. useRef๋ก ํน์ DOM ์ ํํ๊ธฐ import React, { useRef } from 'react'; const nameInput = useRef(); ... nameInput.current.. React ๊ณต๋ถํ๊ธฐ(1) - ์ํ๊ด๋ฆฌ ไธญ ๋ฐฐ์ดํธ ๐ฅ ๋ฒจ๋กํผํธ์ ํจ๊ปํ๋ ๋ชจ๋ ๋ฆฌ์กํธ ๋ถ๋ณ์ฑ !!!! push, splice XXX concat, filter, map OOO 11. ๋ฐฐ์ด ๋ ๋๋งํ๊ธฐ map() : ๋ฐฐ์ด์์ ์๋ ๊ฐ ์์๋ฅผ ๋ณํํ์ฌ ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋ค์ด ์ค ๊ฐ ์์๋ค๋ง๋ค ๊ณ ์ ํ key ๊ฐ์ ์ค์ ํด์ค์ผ ๋จ => ๊ทธ๋์ผ์ง, ์์ ๋์ง ์๋ ๊ธฐ์กด๊ฐ์ ๊ทธ๋๋ก ๋๊ณ ์ํ๋ ๊ณณ์ ๋ด์ฉ์ ์ฝ์ ํ๊ณ ์ญ์ ํจ import React from 'react'; function User({ user }) { return ( {user.username} ({user.email}) ); } function UserList() { const users = [ { id: 1, username: 'velopert', email: 'public.velopert@gmail.c.. ์ด์ 1 ยทยทยท 5 6 7 8 9 10 11 ยทยทยท 15 ๋ค์