React의 클래스형 컴포넌트는 재사용 가능한 행동을 붙이기 위해서 render props와 HOC와 같은 패턴을 사용해왔다. 하지만 이런 패턴을 사용할 때 컴포넌트를 재구성해야 하며 코드를 추적하기 어렵게한다. Hook은 계층 변화 없이 상태관련 로직을 재사용할수 있도록 도와준다.
const [state, setState] = useState()
// Error: Invalid hook call. Hooks can only be called inside of the body of a function component.
const example = () => {
const [state, setState] = useState()
useEffect(() => {
if (name !== '') {
console.log("hi")
}
},[])
/*
if (name !== '') {
useEffect(() => console.log("hi"),[])
}
오류를 발생시킬 수 있다.
*/
}
const Example = () => {
const [count,setCount] = useState(0);
// useState안에 초기값을 설정할 수 있다.
return (
<div>{count}</div>
)
}
const Example = () => {
useEffect(() => {
ajax...
})
}
useEffect(() => {
const timer = setTimeout(() => console.log("hi"),1000)
return clearTimeout(timer)
}
useEffect(
() => {
const subscription = props.source.subscribe();
return () => {
subscription.unsubscribe();
};
},
[props.source],
);
// props.source가 변경될 때에만 구독이 재생성될 것이다.
useEffect(
() => {
const subscription = props.source.subscribe();
return () => {
subscription.unsubscribe();
};
},
[],
);
const Example = () => {
const [count, setCount] = useState(0);
useEffect(() => {
document.title = `Yout clicked ${count} times`;
});
const [isOnline, setIsOnline] = useStaet(null);
useEffect(() => {
const handleStatusChange = (status) => setIsOnline(status.isOnline)
...
}
...
}