ν¨μν μ»΄ν¬λνΈμμ useEffect
λ₯Ό μ΄μ©ν΄μ Lifecycle λ₯Ό κ΄λ¦¬ ν μ μμ΅λλ€.
β μ¬μ©λ²
import React, { useEffect } from "react";
useEffect
λ₯Ό μ¬μ© ν©λλ€.- 2κ°μ νλΌλ―Έν°λ₯Ό μ λ¬νκ² λλλ° 1. callback ν¨μ, 2. μμ‘΄μ± λ°°μ΄ μ μ λ¬ ν©λλ€.
- μμ‘΄μ± λ°°μ΄μ λμ€λΌκ³ λΆλ₯΄κΈ°λ ν©λλ€.
μμ‘΄μ± λ°°μ΄μ λ€μ΄μλ κ° μ€ νλλΌλ λ³ννλ©΄, 첫 λ²μ§Έ νλΌλ―Έν°μΈ μ½λ°± ν¨μκ° λ€μ μν
μμ
β Lifecycle.js
import React, { useEffect, useState } from 'react';
const Lifecycle = () => {
const [count, setCount] = useState(0);
const [text, setText] = useState('');
// Mount
useEffect(() => {
console.log('Mount!');
}, []);
// Update
useEffect(() => {
console.log('update!');
});
return (
<div style={{ padding: 20 }}>
<div>
{count}
<button onClick={() => setCount(count + 1)}>+</button>
</div>
<div>
<input value={text} onChange={(e) => setText(e.target.value)} />
</div>
</div>
);
};
export default Lifecycle;
1. μ»΄ν¬λνΈκ° νμν λ - Mount λλ μμ
useEffect(() => {
console.log('Mount!');
}, []);
- μ»΄ν¬λνΈκ°
Mount
λλ μμ μ console μ΄ μ€νμ΄ λ©λλ€. - μ»΄ν¬λνΈ Mount μμ μμ 무μΈκ°λ₯Ό νκ³ μΆμΌλ©΄
useEffect
μ λ λ²μ§Έ μΈμμΈ λμ€μ λΉ λ°°μ΄μ μ λ¬ ν λ€μμ - μ½λ°± ν¨μμ κ°λ°μκ° νκ³ μΆμ μΌμ λ£μΌλ©΄ λ©λλ€.
2. μ»΄ν¬λνΈκ° update λλ κ²½μ°
- μ λ°μ΄νΈκ° λλ μμ μ state κ° λ³κ²½ λκ±°λ, λΆλͺ¨μκ²μ λ΄λ €λ°λ props κ° λ°λκ±°λ,
- λλ λΆλͺ¨ μ»΄ν¬λνΈκ° 리λ λλ§μ΄ λλ©΄ μκΈ° μμ μ΄ λ¦¬λ λλ§ λ©λλ€
리λ λ λλ€λ λ»μ μ»΄ν¬λνΈκ° μ λ°μ΄νΈ λλ€λ λ§κ³Ό λμΌ ν©λλ€.
useEffect(()=>{ console.log("update!"); })
- μ¬μ©ν λλ μμ‘΄μ± λ°°μ΄(λμ€) λ₯Ό μ λ¬νμ§ μμΌλ©΄ λ©λλ€. ( νμ§λ§ λͺ¨λ μνμ λ°μν΄μ μλ―Έκ° μμ΅λλ€! )
- νΉμ μν λ³νμ λ°λ₯Έ μ
λ°μ΄νΈλ μμ‘΄μ± λ°°μ΄μ κ°μ λ£μ΅λλ€.
β λ§μ½ count > 5 λ₯Ό λμ΄κ°λ©΄ μνν κ²½μ°
useEffect(() => {
console.log(`count is update ${count}`);
if (count > 5) {
alert('count κ° 5 λ₯Ό λμμ΅λλ€. λ°λΌμ 1λ‘ μ΄κΈ°ν ν©λλ€.');
setCount(1);
}
}, [count]);
3. μ»΄ν¬λνΈκ° νλ©΄μμ μ¬λΌμ§ λ - Unmount
import React, { useEffect, useState } from 'react';
const UnmountTest = () => {
useEffect(() => {
console.log('Mount!');
return () => {
// Unmount μμ μμ μ€ν
console.log('Unmount!');
};
}, []);
return <div>Unmount Testing Component</div>; // TrueμΈ κ²½μ° νλ©΄μ return
};
const Lifecycle = () => {
const [isVisible, setIsVisible] = useState(false);
const toggle = () => setIsVisible(!isVisible);
return (
<div style={{ padding: 20 }}>
<button onClick={toggle}>ON / OFF</button>
{isVisible && <UnmountTest />}
</div>
);
};
export default Lifecycle;
{isVisible && <UnmountTest/>}
isVisible
μ΄ True μΈ κ²½μ°λ§ UnmountTest μ»΄ν¬λνΈκ° νλ©΄μ λ λλ§μ΄ λ©λλ€.isVisible
μ΄ Fales μΈ κ²½μ°λ && (and) μ°μ°μμ¬μ λͺ¨λ True μΈ κ²½μ°λ§ μ ν¨νκΈ° λλ¬Έμ λΉκ΅λ₯Ό ν μ μμ΅λλ€.- μ¦ λ λλ§μ΄ λμ§ μμ΅λλ€.
β Mount μ μ λ¬λλ μ½λ°± ν¨μκ° ν¨μλ₯Ό λ¦¬ν΄ λ°κ² νλ©΄ λ©λλ€.
const UnmountTest = () => {
useEffect(() => {
// Mount μ μ λ¬λλ μ½λ°± ν¨μ
console.log('Mount!');
return () => {
// Unmount μμ μμ μ€ν
console.log('Unmount!');
};
}, []);
μ 리
β useEffect
- useEffect() ν μΌλ‘λ§ ν΄λμ€ μ»΄ν¬λνΈμ μλͺ μ£ΌκΈ° ν¨μλ€κ³Ό λμΌν κΈ°λ₯μ μν ν μ μμ
- 첫 μ»΄ν¬λνΈ λ λλ§ μ ν λ²μ μν ( [ ] μ¬λΆμ κ΄κ³μμ΄ )
useEffect(() => {
console.log(number)
console.log(action)
},[number, action])
λ§μ½ number μ κ°μ΄ λ³νλ©΄ μμ useEffect λ λ€μ μλ ν©λλ€. ( action κ°μ΄ κ°μλ! )
- μ¦, numberκ° λ°λλ©΄ console.log(action) μ κ°μ΄ λμ΅λλ€.
- μ΄μ λ μμ‘΄μ± λ°°μ΄μ λ€μ΄μλ κ°μ΄ λ³νκΈ° λλ¬Έμ λλ€.
β μ°Έκ³
'π Front-End > React.js' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
React developer tools (0) | 2022.10.24 |
---|---|
Reactμμ API νΈμΆ (0) | 2022.10.24 |
React Lifecycle (0) | 2022.10.24 |
리μ€νΈ λ°μ΄ν° μμ νκΈ° (0) | 2022.10.24 |
리μ€νΈ λ°μ΄ν° μμ νκΈ° (0) | 2022.10.24 |