β¨ State λ?
μ»΄ν¬λνΈ λ΄μμ λμ μΌλ‘ λ³κ²½λλ κ°μ΄λ€.
β¨ State μ νΉμ§μ?
μ»΄ν¬λνΈ λ΄λΆμμ μ μ΄(κ΄λ¦¬)λλ€.
State μ λ°μ΄νΈλ λΉλκΈ°μ (Asynchronous)μ΄λ€. DOM μ State κ° λ³κ²½λ λλ§λ€ re-rendering λμ§ μμΌλ©°, μ¬λ¬ μ°¨λ‘μ setState κ° μλ€λ©΄ μ λΆ ν΅ν©νμ¬ ν λ²μ re-rendering νλ€.
State λ₯Ό props λ‘ μμ μ»΄ν¬λνΈμ μ λ¬ν μ μλ€. (μΊ‘μν λμκΈ° λλ¬Έμ΄λ€.)
β¨ State λ₯Ό μ¬μ©νλ λ°©λ²μ?
ν¨μν μ»΄ν¬λνΈμμλ useState λΌλ ν (Hook)μ ν΅ν΄ μ¬μ©ν μ μλ€.
useState λ₯Ό νμ©νμ¬ state μ μ΄κΈ°κ°μ μ§μ ν΄μ€ μ μμΌλ©°, μ΄κΈ°κ°μ μ΄λ ν μλ£νμ΄λ λ μ μλ€. (λ¬Έμμ΄, λ°°μ΄, κ°μ²΄ λ±)
setState λ state λ₯Ό κ°±μ ν΄μ£Όλ ν¨μμ΄λ©°, μ΄λ₯Ό ν΅ν΄μλ§ stateμ κ°μ λ³κ²½ν μ μλ€.
λΉλκΈ°μ μ΄λΌλ νΉμ§μΌλ‘ μΈν΄, νλμ ν¨μ λ΄μμ λ³κ²½ν state λ₯Ό λ°λ‘ μ΄μ΄μ λΆλ¬μ¬ μλ μλ€.
import { useState } from 'react'
const Component = () => {
const [ state, setState ] = useState('')
}
β¨ Effect Hook λ?
"Hook" μ΄λ? ν¨μν μ»΄ν¬λνΈμμ State μ LifeCycle κΈ°λ₯μ μ¬μ©ν μ μκ² ν΄ μ£Όλ μ»΄ν¬λνΈμ΄λ€. μ¦, μ»΄ν¬λνΈ λ΄λΆμ μμ μ£ΌκΈ°μ μνλ₯Ό κ΄λ¦¬ν μ μλλ‘ λλ ν¨μμ΄λ€. React μ λ΄μ₯ Hook μΌλ‘λ State hook, Effect hook λ±μ΄ μλ€.
Effect Hook μ μ»΄ν¬λνΈ λ΄μμ νΉμ λΆλΆμ λ³νκ° μκΈ΄ λ€μ (νΉμ λ λλ§ μ΄νμ) μ§μ ν ν¨κ³Ό(===μ½λ°±ν¨μ)λ₯Ό μ€ννλ€. νΉμ λμμ΄ λ°μνλ©΄ μλμΌλ‘ νΉμ νλμ νλλ‘ νλ Hook μ΄λΌκ³ 보면 λλ€.
맀κ°λ³μ (parameters)
useEffect(callback, state) ν¨μλ λ κ°μ μ λ¬μΈμλ₯Ό λ°λλ€.
첫 λ²μ§Έ μ λ¬μΈμλ callback ν¨μμ΄λ€.
λ λ²μ§Έ μ λ¬μΈμλ μμ‘΄μ±μ λ΄μ λ°°μ΄λ‘, μ΄λ€ νκ²½(λλ 쑰건)μμ callback ν¨μκ° μ€νλ μ§λ₯Ό μ§μ ν΄μ€λ€. μ΄ λΆλΆμ΄ μ λ¬λμ§ μλλ€λ©΄ μ»΄ν¬λνΈκ° λ λλ§ λ λλ§λ€ callback μ΄ μ€νλλ€.
useEffect(() => {
console.log('test stateμ λν΄μλ§ νΈμΆ!')
}, [test])
// ν΄λΉ hook μ κ²½μ°, μ»΄ν¬λνΈ λ΄ test λΌλ state μ λ³νκ° μκΈΈ λλ§ console.log ν¨μκ° μ€νλλ€.
μ»΄ν¬λνΈκ° μ²μμ λ λλ§ λ λ ν λ²λ§ μ€ννκ³ μΆμ κ²½μ°, λ λ²μ§Έ μ λ¬μΈμμ λΉ λ°°μ΄μ λκΈ°λ©΄ λλ€.
useEffect(() => {
console.log('μ²μ ν λ²λ§ μ€ν!')
}, [])
UseEffect μ Cleanup
UseEffect ν¨μμ callback ν¨μμμ λ ν¨μλ₯Ό return ν μ μμΌλ©°, μ΄λ₯Ό cleanup ν¨μλΌκ³ νλ€.
useEffect(() => {
console.log('update count1');
return () => {
console.log('update count1 or unmount');
};
}, [count]);
cleanup ν¨μμ νΉμ§μ μλ‘μ΄ μνλ‘ μΈν΄ Effect κ° μ€νλ λ, μ΄μ μ κ°μ μ μ§ν μνμμ μ€νλλ€λ μ μ΄λ€.
useEffect(() => {
console.log(count);
return () => {
console.log("cleanup" + count);
};
}, [count]);
μλ₯Ό λ€μ΄ count κ° 0 μμ 1λ‘ λ³νν κ²½μ°, μ½μμ°½μλ 'cleanup0', '1'κ° μμλλ‘ μ°νλ€. μ΄μ΄μ count κ° 1μμ 2λ‘ λ³νν κ²½μ°, μ½μμ°½μλ 'cleanup1', '2'κ° μμλλ‘ μ°νλ€. cleanup ν¨μλ μ΅μ’ μ μΌλ‘ component κ° μ κ±°λκΈ° μ (unmount ν λ) ν λ² λ μ€νλλ€.
β¨ Hook μ¬μ© μ μ£Όμν μ
μ»΄ν¬λνΈ λ΄λΆμ μ μΈμ ν΄ μ£Όμ΄μΌ ν¨κ³Όλ₯Ό μ€ μ μλ€.
λν, μ»΄ν¬λνΈ μ΅μλ¨μ μ μΈμ ν΄ μ£Όμ΄μΌ νλ€ (쑰건문μ΄λ λ°λ³΅λ¬Έ μμ μ μΈνλ©΄ ν¨κ³Όκ° μλ€.)
μ°Έκ³ μλ£
'π» DEV > React' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[React] React μ μλͺ μ£ΌκΈ°(Life Cycle) λ? (0) | 2021.05.27 |
---|---|
[React] React μμ μ΄λ―Έμ§(Image) 첨λΆνκΈ° (0) | 2021.05.09 |
[React] React.Fragment λ? (0) | 2021.05.09 |
[React] 리μ€νΈμ Key (0) | 2021.05.09 |
λκΈ