처음에 클래스형의 ComponentDidmount 처럼 useEffect를 사용하기 위해 두 번째 매개변수로 빈 배열을 주면 된다는 것을 알았지만 Eslint 자동 저장 때문에 배열안에 자동으로 변수를 기입하여 변수를 의존하게 만들었다.
const [msg, setMsg] = useState("");
const [arr, setArr] = useState([]);
useEffect(() => {
socket.on("update message", obj => {
setArr(res);
// res값을 받아서 setRes로 변경하는 의도지만 아래 배열안에 자꾸 res가 자동으로 기입
});
bottom.current.scrollTo({ top: bottom.current.scrollHeight });
}, [res]);
const [msg, setMsg] = useState("");
const [arr, setRes] = useState([]);
useEffect(() => {
socket.on("update message", obj => {
setArr(prev => [...prev, obj]);
// res값을 받아서 setRes로 변경하는 의도지만 아래 배열안에 자꾸 res가 자동으로 기입
});
bottom.current.scrollTo({ top: bottom.current.scrollHeight });
}, [res]);
이러한 경우 함수 형태의 업데이터를 사용하면 된다 (최신 방법)
prev => [...prev, obj]