
클래스형 컴포넌트에서 제공하는 기능을 함수형 컴포넌트에서 사용할 수 있도록 도입된 함수
useState : 동적 상태 관리
useEffect : mount,update,unmount effect 감지
useRef : DOM의 특정 요소 선택
useCallback : 함수 재사용
useMemo : 연산한 값 재사용
import { useState } from "react";
//사용자 이름과 별명을 관리
const Info = () => {
const [name, setName] = useState("");
const [nickname, setNickname] = useState("");
const changeName = (e) => setName(e.target.value);
const changeNickname = (e) => setNickname(e.target.value);
return (
<>
<div>
<p>이름:{name}</p>
<p>별명:{nickname}</p>
</div>
<div>
<p> 이름:<input type="text" name="name" value={name} onChange={changeName} /></p>
<p> 별명: <input type="text" name="nickname" value={nickname} onChange={changeNickname}/></p>
</div>
</>
);
};
export default Info;
클래스형 컴포넌트의
componentDidMount,componentDidUpdate,comdponentWillUnmount를 합친 형태
useEffect(이펙트 함수, 의존성 배열);
의존성 배열
// 의존성 배열을 생략 => 마운트, 업데이트 모두 이펙트 함수를 실행
useEffect(() => {
console.log("렌더링이 완료되었습니다.");
console.log({ name, nickname });
});

useEffect(() => {
console.log("렌더링이 완료되었습니다.");
console.log({ name, nickname });
}, []);
useEffect(() => {
console.log("렌더링이 완료되었습니다.");
console.log({ name, nickname });
}, [name]);
useEffect(() => {
console.log("렌더링이 완료되었습니다.");
console.log({ name, nickname });
//componentWillUnmount 메소드와 동일한 역할
return () => console.log("cleanup", name);
}, [name]);
return () => console.log("cleanup", name);
name 상태변수가 변경되거나 컴포넌트가 언마운트될 때 실행

useEffect(() => {
console.log("렌더링이 완료되었습니다.");
console.log({ name, nickname });
return ()=>console.log("clean up", name);
}, []); //의존성 배열 설정