내 문제를 쉽게 묻기 위해이 코드의 결과를 설명하겠습니다.
const ForExample = () => {
const [name, setName] = useState('');
const [username, setUsername] = useState('');
useEffect(() => {
console.log('effect');
console.log({
name,
username
});
return () => {
console.log('cleaned up');
console.log({
name,
username
});
};
}, [username]);
const handleName = e => {
const { value } = e.target;
setName(value);
};
const handleUsername = e => {
const { value } = e.target;
setUsername(value);
};
return (
<div>
<div>
<input value={name} onChange={handleName} />
<input value={username} onChange={handleUsername} />
</div>
<div>
<div>
<span>{name}</span>
</div>
<div>
<span>{username}</span>
</div>
</div>
</div>
);
};
때 ForExample component마운트는, '효과는'기록됩니다. 이것은 componentDidMount().
그리고 이름 입력을 변경할 때마다 '효과'와 '정리'가 모두 기록됩니다. 반대로 [username]두 번째 매개 변수를 추가했기 때문에 사용자 이름 입력을 변경할 때마다 메시지가 기록되지 않습니다 useEffect(). 이것은componentDidUpdate()
마지막으로 ForExample component마운트 해제시 'cleaned up'이 기록됩니다. 이것은 componentWillUnmount().
우리 모두 알고 있습니다.
요약하면 구성 요소가 다시 렌더링 될 때마다 '정리 됨'이 호출됩니다 (마운트 해제 포함).
이 구성 요소가 마운트 해제 된 순간 만 '정리 됨'으로 기록되도록하려면의 두 번째 매개 변수를로 변경하면 useEffect()됩니다 [].
그러나 만약 내가 변화 [username]로 [], ForExample component더 이상 구현하는 componentDidUpdate()이름을 입력합니다.
내가하고 싶은 것은 구성 요소가 componentDidUpdate()이름 입력과 componentWillUnmount(). (구성 요소가 마운트 해제되는 순간에만 '정리 됨'로깅)

username두 번째 인수로 배열이 제공 되고 하나는 두 번째 인수로 빈 배열이 제공됩니다.