์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Gatsby
- ์ฝ๋ฉํ ์คํธ
- ํ๋ก ํธ์๋
- useRef
- fetch API
- ํ๋ก๊ทธ๋๋จธ์ค
- ๋ฐ๋ธ์ฝ์ค3๊ธฐ
- ์๊ณ ๋ฆฌ์ฆ
- ์๋ฐ์คํฌ๋ฆฝํธ
- position
- Props
- history api
- CSS
- Flex
- useEffect
- REACT
- float
- ๋ฐ๋ธ์ฝ์ค
- ๋ธ๋ก๊ทธ
- Today
- Total
Daehyunii's Dev-blog
์ปดํฌ๋ํธ ์คํ์ผ๋ง, useMemo, useCallback, Custom Hook ๋ณธ๋ฌธ
์ปดํฌ๋ํธ ์คํ์ผ๋ง, useMemo, useCallback, Custom Hook
Daehyunii 2022. 12. 19. 00:12์ปดํฌ๋ํธ ์คํ์ผ๋ง
1. ์คํ์ผ์ํธ ์ ์ฉ
์ธ๋ถ CSSํ์ผ์ importํ์ฌ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค.
2. Inline style ์ ์ฉ
๋์ ์ผ๋ก ์คํ์ผ์ ๊ฒฐ์ ํ๋ ๊ฒฝ์ฐ์ ์์์ ์์ฑ์ผ๋ก style์ ์ฃผ๋ ๋ฐฉ๋ฒ์ด๋ค.
3. CSS in JS ์ ์ฉ
์ฌ๋ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋๋ฐ ๊ฐ์์์๋ emotion์ด๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค.
yarn add @emotion/react @emotion/styled
useMemo
์ปดํฌ๋ํธ๋ ์๋์ ๊ฐ์ ์ํฉ์์ ๋ฆฌ๋ ๋๋ง ๋๋ค.
- ํจ์ ์ปดํฌ๋ํธ๋ ์์ ์ ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๋
- ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ก๋ถํฐ ๋ฐ๋ prop์ด ๋ณ๊ฒฝ๋ ๋
- ๋ถ๋ชจ ์ปดํฌ๋ํธ์ ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๋
๋ง์ฝ ์ฐ์ฐ ์๋๊ฐ ๋๋ฆฐ ์ปดํฌ๋ํธ๋ผ๋ฉด ๋ ๋๋ง ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆด ๊ฒ์ด๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ ์ต์ ํ๋ฅผ ์ํด useMemo๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ํ์ํ๋ค.
๋๋ฒ์งธ ์ธ์๋ก ๋ฐฐ์ด์ ๋๊ฒจ์ฃผ๋๋ฐ, ๋ฐฐ์ด ์์ n์ด ๋ณ๊ฒฝ ๋ ๋๋ง sum()ํจ์๋ฅผ ์คํ์ํค๊ธฐ ์ํด useMemo ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ์ํ ๊ฐ์ ๋ณ๊ฒฝ๊ณผ ๊ด๊ณ์์ด ๋ ๋ฆฝ์ ์ผ๋ก ์คํํ๋๋ก ๋ง๋ค์ด ์ฃผ์๋ค.
const result = useMemo(() => sum(n), [n])
React.memo
๋ถ๋ชจ ์ปดํฌ๋ํธ๋ ๋ณ๊ฒฝ๋์์ง๋ง ์์ ์ปดํฌ๋ํธ๊ฐ ๋ณ๊ฒฝ๋์ง ์์์ ๋ ๋ฆฌ๋ ๋๋งํ์ง ์๋๋ก ๋์์ฃผ๋ ํจ์์ด๋ค. ์์ ์ปดํฌ๋ํธ์์ ๋ฆฌ๋ ๋๋ง๋๋ ํจ์๋ฅผ React.memo๋ก ๊ฐ์ธ์ฃผ๋ฉด ๋๋ค.
useCallback
์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง๋ ๋ ํจ์๊ฐ ๋ค์ ์ ์ธ๋๋ ๊ฒ์ ๋ง๊ธฐ ์ํด ์ฌ์ฉ๋๋ hook์ด๋ค. checkbox ํ๋๋ฅผ ํด๋ฆญํ๋๋ฐ Checkbox ์ปดํฌ๋ํธ์ ์ฐ๊ฒฐ๋์ด ์๋ ํจ์๋ค์ด ์ ๋ถ ์ ์ธ๋๋ ๋ฌธ์ ๋ฅผ useCallback์ ์ฌ์ฉํด ํด๊ฒฐํ ์ ์๋ค.
...
const foodChange = useCallback((e) => setFoodOn(e.target.checked), [])
const clothesChange = useCallback((e) => setClothesOn(e.target.checked), [])
const shelterChange = useCallback((e) => setShelterOn(e.target.checked), [])
return (
<div>
<Checkbox ... onChange={foodChange} />
<Checkbox ... onChange={clothesChange} />
<Checkbox ... onChange={shelterChange} />
</div>
)
Custom Hook
์ฌ์ฉ์ ์ ์ hook์ ๊ธฐ์กด hook์ ์กฐํฉํด์ ๋ง๋ค ์ ์๋ค. ์ด๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋์ ์ค๋ณต์ ์ค์ผ ์ ์๊ณ ์ปดํฌ๋ํธ๋ ๋ ๊น๋ํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
import { useCallback, useState } from 'react';
const useToggle = (initialState = false) => {
const [state, setState] = useState(initialState);
const toggle = useCallback(() => setState((state) => !state), []);
return [state, toggle];
};
export default useToggle;
import useToggle from './useToggle';
function App() {
const [on, toggle] = useToggle();
return (
<div>
<button onClick={toggle}>{on ? 'true' : 'false'}</button>
</div>
);
}
export default App;
'๐ Language & CS knowledge > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ปดํฌ๋ํธ ํน์ง๋ค (0) | 2022.12.22 |
---|---|
JSX๋? (0) | 2022.12.20 |
์ฌ์ฉ์ฌ๋ก - ํ์ด์ง๋ค์ด์ ๋ง๋ค๊ธฐ (0) | 2022.12.18 |
React, useEffect, useRef, props (0) | 2022.12.18 |
classํ ์ปดํฌ๋ํธ - pureComponent (0) | 2022.12.16 |