* λ©΄μ μμ λ°μλ μ§λ¬ΈμΈλ°, λ΅μ κ³ μ¬νκ³ μ§λ¬Έ μ체λ₯Ό μ΄ν΄ λͺ» ν μ λμμΌλ, μμ§ λͺ»νλ κ°λ μ΄μμ΅λλ€. π₯
Custom Hooks
λ κ°μ μλ°μ€ν¬λ¦½νΈ ν¨μμμ κ°μ λ‘μ§μ 곡μ νκ³ μ ν λλ λ λ€λ₯Έ ν¨μλ‘ λΆλ¦¬ν©λλ€. μ»΄ν¬λνΈμ Hook λν ν¨μμ΄κΈ° λλ¬Έμ κ°μ λ°©λ²μ μ¬μ©ν μ μμ΅λλ€ - μ΄μ 곡μ μλ£μ λμ¨ μ€λͺ μΈλ°, μμ§ μ΄ν΄νκΈ°μλ λΆμ‘±ν μ€λͺ κ°μ΅λλ€. λ°λ³΅λλ ν νμ© λ©μλλ€μ νλλ‘ μ€μ¬μ€μΌλ‘μ¨ λ κ°κ²°νκ³ λ³΄κΈ° μ’μ μ½λλ₯Ό λ§λ€ μ μλ κ²μ΄ λ°λ‘ custom hooksμ λλ€
- μ΄λ¦μ useλ‘ μμνλ μλ°μ€ν¬λ¦½νΈ ν¨μμ λλ€.
- custom hookμ λ€λ₯Έ hookμ νΈμΆ ν μ μμ΅λλ€
- custom hookμ μ‘°κ±΄λΆ ν¨μκ° μλμ΄μΌ ν©λλ€
μμ μ½λλ₯Ό 보면 μ΄ν΄νκΈ° μ’μ κ±°μμ
(#νλ€μ μ½λλ₯Ό 곡μ ν©λλ€. μΆμ²λ μλ νλ€ λΈλ‘κ·Έ μ£Όμλ₯΄ λνμ΅λλ€)
usePreviousλ μ΄μ λ λλ§μμ κ°μ κΈ°μ΅ν΄λμ΄μΌ νλ κ²½μ°μ μ¬μ©ν μ μμ΅λλ€. νμ¬ λ λλ§κ³Ό μ΄μ λ λλ§ κ°μ λΉκ΅ν νμκ° μμ λ μ¬μ©ν©λλ€.
import { useEffect, useRef } from "react";
function usePrevious(value){
const ref = useRef();
useEffect(() => {
ref.current = value;
}, [value]);
return ref.current;
}
export default usePrevious;
νμ¬ κ°μ΄ C μ΄κ³ μ΄μ κ°μ΄ BλΌλ©΄ λκ°λ₯Ό μνν΄λΌ~ λΌλ λ‘μ§μ λλ€. μ΄μ μνκ°μ μ μ νλ usePrevious λ‘μ§μ΄ custom hook λ΄λΆλ‘ λ€μ΄κ° μ»΄ν¬λνΈλ κΉλν μνλ₯Ό μ μ§νκ³ μμ΅λλ€
function MyComponent(){
const [alphabet, set] = useState('A');
const prevAlphabet = usePrevious(alphabet);
useEffect(() => {
if(alphabet === 'C' && prevAlphabet === 'B'){
doSomething();
}
},[]
}
μ¬μ©μ μ΄μ
μ»΄ν¬λνΈ λ‘μ§μ λ½μλ΄μ μ μν μ΄νμ κ°νΈνκ² νΈμΆν μ μλ€λ κ²μ΄ custom hooksμ ν° μ₯μ μ λλ€.
μ½λμ κ°λ μ±μ λμ΄κ³ μ§§κ³ κ°κ²°ν μ½λλ₯Ό μμ±ν μ μκ² λμμ€λλ€.
νμ΅ μ°Έμ‘° μλ£
'κ°λ° > React' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[React] λ€κ΅μ΄ μ²λ¦¬νκΈ° - i18n μ¬μ©νκΈ° (0) | 2022.04.02 |
---|---|
[React] React-Query λ? (0) | 2022.03.28 |
[React] useEffect μ useLayoutEffect μ μ°¨μ΄μ (0) | 2022.03.22 |
React vs Vue.js μ°¨μ΄μ (0) | 2022.03.02 |
[React] 리μ‘νΈ νλ‘μ νΈ Netlifyλ‘ λ°°ν¬νκΈ° (0) | 2022.02.21 |