๐๋ฆฌ๋ค๊ธฐ, ๊ณต์๋ฌธ์, ๋ ธ๋ง๋ ์ฝ๋, ์ ๋ก์ด๋์ ์์์ ๋ณด๊ณ ์ ๊ฐ ์ดํดํ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์ ๋ฆฌํ ๊ธ์ ๋๋ค.๐
๋ฆฌ๋ค๊ธฐ์์ 8์ฅ์ ํ ์ ๋ํ ์ค๋ช ์ด ๋์จ๋ค. ์์ ๋ฅผ ๋ฐ๋ผํ๋ฉด์ ํด๋ณด์์ง๋ง 8์ฅ๊น์ง ํ๋๋ฃจ๋ง๋๋ฃจ ๋ฌ๋ ค์ ๊ทธ๋ฐ๊ฐ ๋์ ๊ณผ๋ถํ๊ฐ ์์ ๋จธ๋ฆฌ๊ฐ ๋ฐ์๋ค์ด๊ธฐ๋ฅผ ๊ฑฐ๋ถ๋ฅผ ํ๋ ๊ฒ ๊ฐ์๋ค.
ํ์ง๋ง, 8์ฅ๊น์ง ํ์๋ ์ด ๋ถ๋ถ์ด ๋น์ค์ด ์๊ณ ์ค์ํ๋ค๊ณ ๋๊ปด์ก๊ธฐ ๋๋ฌธ์ ํ๋ฃจ ์ฌ๊ณ ํ๋ฃจ ๋ค์ ๋ ์ก์์ ๊ณต์๋ฌธ์์ ์ฑ , ์์์ ๊ฐ๋ฆฌ์ง ์๊ณ ์ฐพ์๋ณธ ๊ฒฐ๊ณผ ์ด๋ ์ ๋? ์กฐ๊ธ์? ์ดํด๋ฅผ ํ ์ ์์๋ค.๐ฅ
์ฐ์ ์ ์ผ ์ค์ํ ํฌ์ธํธ๋ ๊ฐ๋ ์ ์ด๋ ์ ๋ ์ดํด๋ฅผ ํ๊ณ ์์ ๋ฅผ ๋ค์ ํด๋ณด๋๊ฒ!์ด ์ดํด๋ฅผ ํ๋ ๋ฐ ๋ง์ ๋์์ด ๋๋ค.
๋, ๋ ธ๋ง๋ ์ฝ๋๋์ ์์๊ณผ ์ ๋ก์ด๋์ ํ ์ ๋ํ ์์์ด ๋์์ด ๋ง์ด ๋๋ค.
ํ ์ ํจ์ํ ์ปดํฌ๋ํธ์์ state๋ฅผ ๊ฐ์ง ์ ์๊ฒ ํด์ฃผ๋ ์ค์ํ ์์์ด๋ค.
๊ทธ๋ ๊ธฐ์ ์ฌ๋ฌ ํจ์๋ค์ด ์กด์ฌํ๋๋ฐ ์ด๋ฌํ ํจ์๋ค์ ์ฐ๋ ์์๊ฐ ๋งค์ฐ ์ค์ํ๋ค!
์ผ๋จ ๋ด๊ฐ ์ ๋ฆฌํ ํจ์๋ค์ ์๋์ ๊ฐ๋ค.
- useState
- useEffect
- useRef
- useMemo
- useCallback
useState
import React, {useState} from 'react';
const [value, setValue] = useState(0);
//value์ ์ด๊น๊ฐ์ 0์ผ๋ก ์ค์
<button onClick ={() => setValue(value+1)}>+1</button>
//์ด๋ฐ์์ผ๋ก return ์์ ๋ฃ์ด์ฃผ๊ฒ ๋๋ฉด +1์ด๋ผ๊ณ ์ฐ์ฌ์๋ ๋ฒํผ์ ๋๋ฅด๋ฉด value์ ๊ฐ์ด 1์ฉ ์ฌ๋ผ๊ฐ
useState๋ ํ๋ฉด ๋ ๋๋ง๊ณผ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ
useState๋ ๊ทธ๋ ๊ณ ๋๋จธ์ง ํ ์ ์ฌ์ฉํ ๋๋ ๊ผญ! ๋งจ ์ ์ค์ import React, {์ฌ์ฉํ๋ ํ } from 'react';๋ฅผ ์ ์ด์ค์ผํ๋ค.
useState๋ฅผ ์ด์ฉํด์ ๊ธฐ๋ณธ๊ฐ์ 0์ผ๋ก ์ค์ ํ๊ณ , [value, setValue]๋ผ๋ ๋ฐฐ์ด์ ์ค์ ํ๋ค.
์ด ๋ฐฐ์ด์ [์ํ๊ฐ, ์ํ๋ฅผ ์ค์ ํ๋ ํจ์]์ด๋ค.
์ด๋ ๊ฒ ํจ์ํ ์ปดํฌ๋ํธ์์๋ ์ํ ๊ด๋ฆฌ๋ฅผ ํ ์ ์๊ฒ ๋๊ธฐ ๋๋ฌธ์ ์ํ๊ด๋ฆฌ๋๋ฌธ์ ๊ตณ์ด ํด๋์คํ์ ์ฐ์ง ์์๋ ๋๋ค.
๋๋ ์์ง ํ์คํ์ง๋ ์์ง๋ง, ํจ์ํ์ด ํด๋์คํ๋ณด๋ค ํธํ๊ฒ ๊ฐ๋ค. ์๋ํ๋ฉด, ํด๋์คํ์ฒ๋ผ this๋ฅผ ์ฐ์ง ์์๋ ๋๊ธฐ ๋๋ฌธ,,
useEffect
useEffect๋ componentDidMount, componentDidUpdate, componentWillUnmount ์ด๋ ๊ฒ ์ธ๊ฐ์ง๋ฅผ ํฉ์น๊ฑฐ๋ผ๊ณ ๋ณผ ์ ์๋ค.
์๋ ๋ณดํต componentDidMount, componentDidUpdate์ ํฉ์น๊ฑฐ๋ก ๋ด๋ ๋ฌด๋ฐฉํ๋ค๊ณ ํ์ง๋ง useEffect์ ๋๋ฒ์งธ ์์์ ๋น ๋ฐฐ์ด[]์ ๋ฃ๊ฒ ๋๋ฉด componentWillUnmount์ ์ญํ ์ ํ ์ ์๋๊ฑฐ ์๋๊ฐ?
useEffect๋ ๋๊ฐ์ ์ธ์๊ฐ ํ์ํ๋ค.
useEffect(effect:React.EffectCallback, deps)์ด๋ ๊ฒ ๊ตฌ์ฑ์ด ๋์ด์๋ค.
์ด๋ ๋ ๊ฐ์ ์ธ์๊ฐ ํ์ํ๋ฐ, ์ฒซ๋ฒ์งธ๋ function์ผ๋ก์์ effectํจ์๋ฅผ ๋ฃ๋ ๊ฒ์ด๊ณ , ๋๋ฒ์งธ ์ธ์๋ก๋ dependencies๋ฅผ ๋ฃ๋ ๊ฒ์ด๋ค.
deps๊ฐ ์กด์ฌํ๋ค๋ฉด, deps๋ถ๋ถ์ ๋ฆฌ์คํธ์ ์๋ ๊ฐ์ผ ๋๋ง ๊ฐ์ด ๋ณํ๋๋ก ํ์ฑํ!
useEffect(() => {
console.log(name);
},[name]);
//name์ ๊ฐ์ด ๋ณํ ๋๋ง ์ฝ์์ name์ ์ถ๋ ฅ
useRef
์ง๊ธ๊น์ง ๋ฆฌ์กํธ๋ฅผ ๊ณต๋ถํ๋ฉด์ ๋ผ์ดํ์ฌ์ดํด๊ณผ ํ ์ ๊ฐ์ฅ ๋ฐ์๋ค์ด๊ธฐ๊ฐ ์ด๋ ค์ ๋ค.
๊ทธ๋์ ์ด๋ฐ์ ๋ฐ ์ ๋ฆฌ๋์ด์๋ ์๋ฃ๋ค์ ์ฐพ์๋ณด๋ฉด์ ๋ด ๊ฒ์ผ๋ก ๋ง๋ค๋ ค๊ณ ๋ง์ด ๋ ธ๋ ฅํด๋ดค๋ค.
์ ๋ก์ด๋์ด useRef๋ฅผ ์ ๋ฆฌํด๋์ ์๋ฃ๋ฅผ ์ฐธ๊ณ ํด๋ณด์๋ค.
www.zerocho.com/category/React/post/5f9a7c8807be1d0004347311
useRef๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์์ GetElementById()์ ๋์ผํ๋ค๊ณ ํ ์ ์๋ค.
useRef๋ ์ด๋จ๋ ์ฌ์ฉํ๋ฉด ์ข์๊น?
- ํ๋ฉด ๋ฆฌ๋ ๋๋ง๊ณผ๋ ๊ด๋ จ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
- ํน์ DOM์ ์ ํํ ์ ์๊ฒ๋ ํ๋ ๊ธฐ๋ฅ
์) ์๋ฆฌ๋จผํธ์ ํฌ๊ธฐ ๊ฐ์ ธ์ค๊ธฐ, ์คํฌ๋กค๋ฐ ์์น ๊ฐ์ ธ์ค๊ธฐ, ํฌ์ปค์ค ์ค์
useRef๋ก ์์ฑํ ๋ฐ์ดํฐ๋ ๋ฆฌ๋ ๋๋ง๊ณผ ์๊ด์ด ์๋ค.
const Ref_ex = () =>{
const inputF = useRef(null); //์ด๊ธฐ๊ฐ์ ์์ฑํ ๋ ์ธ์๋ก ์์ฑํด์ฃผ๋ฉด ๋จ
///////
const onChange = useCallback(e=> {
inputF.current.focus();//์ด ์ค์ ์ธํ์ฐฝ์ ๊ณ์ ํฌ์ปท์ค๊ฐ ๋์ด๊ฐ๋๋ก!
}
///////
return(
<>
<input ref={input}/>
</>
)
}
์ด๋ ๊ฒ ์ฝ๋๋ฅผ ์์ฑํ๊ฒ ๋๋ฉด(์ค๊ฐ์ค๊ฐ ์ฝ๋๋ค์ ๋ค ์๋ตํ์ผ๋๊น ๊ฐ์ํ๊ณ ๋ด์ฃผ์ธ์),useRef๋ฅผ ํตํด ๋ง๋ ๊ฐ์ฒด ์์ current ๊ฐ์ด ์ค์ ์๋ฆฌ๋จผํธ๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
์ฌ๊ธฐ์ ํน์ดํ ์ ์ inputF์ ๊ฐ์ ๊ฐ์ ธ์ฌ ๋, current๋ก ์ ๊ทผํด์ผํ๋ ๊ฒ์ด๋ค. current ์์ฑ์ ์ฌ์ฉํด์ ์ ๊ทผํ๋๋ก ํ๋ผ๊ณ ํ๋ค.
์ฅ ๋๋์ฒด ์? ํ๋กํผํฐ ๊ฐ์ ๋ฐ์์์ผํ๊ธฐ ๋๋ฌธ์ด๋ค!
current๋ฅผ ํตํด ํ๋กํผํฐ ๊ฐ์ ๋ฐ์์ผํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ๋๋ฐ, ๋ฐ์ ๊ตต์ ๊ธ์๋ก ์จ์ ธ์๋๊ฑฐ๋ hook์ ํตํด์ ํด๊ฒฐ๋ ๋ถ๋ถ์ด๋ค!
useMemo
useMemo๋ ๊ฐ์ ๊ธฐ์ตํ๋ ํ ์ด๋ค.
useMemo์ useRef์ useCallback์ ์ฐจ์ด์ ์ ๋ฌด์์ผ๊น?
useCallback๋ ํจ์ ์์ฒด๋ฅผ ์บ์ฑํ๊ณ , useMemo๋ ๋ณต์กํ ํจ์ ๊ฒฐ๊ณผ๊ฐ์ ๊ธฐ์ตํ๊ณ , useRef๋ ์ผ๋ฐ๊ฐ์ ๊ธฐ์ตํ๋ค.
const LottoNums = useMemo(()=>getWinNumbers, []);
๋ง์ฝ ์ฝ๋๊ฐ ์ด๋ ๊ฒ ์์ฑ๋๋ค๋ฉด, getWinNumbers()ํจ์๋ฅผ ํตํด ๋์จ ๋ฆฌํด๊ฐ์ด []๋ฐฐ์ด์ ๊ธฐ์ต๋๋ ๊ฒ์ด๋ค.
useCallback
ํจ์๋ฅผ ๊ธฐ์ตํด์ค์ ํจ์์์ฑ์๊ฐ์ ์ค์ฌ์ฃผ๋ ๊ฒ
useCallback(() => {},[]);
useMemo(() => ๊ฐ, []);
๋ ๋ค ํจ์๋ฅผ ์ฒซ๋ฒ์งธ ์ธ์๋ก, ๋๋ฒ์งธ๋ deps๋ฐฐ์ด์ ๋ฐ๋๋ค.
ํ์ง๋ง, useCallback์ ()=>{} ์์ฒด๋ฅผ ๊ธฐ์ตํ๋๊ฑฐ๊ณ , useMemo๋ ๊ฐ์ ๊ธฐ์ตํ๋ ๊ฑฐ๋ค.
deps ์์ ๊ฐ์ด ๋ฐ๋ ๋๋ง๋ค ์๋ก ์คํ๋๋ค.
์ฃผ์์ฌํญ
๐ค์ ํจ์๋ง๋ค ์ฌ์ฉํ์ง ์์ง?
๊ธฐ์ต์ ๋๋ฌด ์ํ๊ธฐ ๋๋ฌธ์ ๋ช๋ฒ์ด๊ณ ๋ ๋๋งํด๋ ์ฒซ ๊ฐ์ ๊ธฐ์ต
์์ ์ปดํฌ๋ํธ์ ํจ์๋ก props๋ฅผ ๋๊ธธ๋ useCallback ํ์!!
์๋ฅผ ๋ค์ด, onClick={onClickRedo} ์ด๋ฐ ์ฝ๋๊ฐ ์ฐ์ผ ๋, ์์์ด ์ธ๋ฐ์์ด ๋ฆฌ๋ ๋๋ง ๋์ง ์๋๋ก ๋ง๋ค์ด์ค๋ค.
๋๋ฆ ๊ทธ๋๋ ํฌ์คํธ๋ฅผ ์ฐ๋ฉด์ ์ ๋ฆฌํด๋ณด๋ ๋จธ๋ฆฟ ์์ด ์กฐ๊ธ ์ ๋ฆฌ๋ ๊ฒ ๊ฐ๋ค.
๊ทธ๋๋, ์ด ํ ์ ์ ์ฌ์ ์์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๊ณ์ ์ฌ์ฉํด๋ณด๊ณ ๊ณต๋ถํด์ผ๋ ๊ฒ ๊ฐ๋ค.
ํ๋ฉด ํ ์๋ก ๊ณต๋ถํ ๊ฒ ๋์ด๋๋ ๊ฒ ๊ฐ์์ ๋๋ฌด,,,,์ข,,,,๋ค,,,,^^๐คจ
'WEB > REACT' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] ๋๊ธ๊ธฐ๋ฅ ๊ตฌํ (0) | 2021.01.25 |
---|---|
[React] ํฌ๋๋ฆฌ์คํธ ์ปดํฌ๋ํธ ๊ตฌ์กฐ&์ฝ๋ ๋ถ์ (0) | 2021.01.11 |
[React] ์คํฌ๋กค๋ฐ์ค ์ฝ๋์ ์์๋ ์ด๋ ๊ธฐ๋ฅ ๊ตฌํ (0) | 2021.01.02 |
[React] ref (0) | 2021.01.01 |
[React] render() ํจ์ (0) | 2020.12.30 |