React Hooks은 리액트의 새로운 기능으로 React 16.8버전에 새로 추가된 기능
const [state , setState] = useState(초기값)
함수형 업데이트
setState에 값을 그대로 전달하는 것이 아니라 함수를 전달하는 것
const [num, setNum] = useState(1)
function plus() {
setNum(num => num + 1)
setNum(num => num + 1)
setNum(num => num + 1)
}
값을
<button onClick={plus}>PLUS</button>
에 전달
단, 최적화 문제를 해결하기 위해 다시 useCallback을 사용하여 보내준다.
const handlePlus = useCallback((): void => setNum(prev => prev + 1), []);
<button onClick={handlePlus}>PLUS</button>
useEffect(() => {
console.log('마운트 되었을 때');
return () => {
console.log('언마운트 되었을 때');
};
}, [업데이트 되었을 때]);
//ex
const memoizedCallback = useCallback(함수, 배열);
///
const add = () => x + y;
const add = useCallback(() => x + y, [x, y]);
Memo는 Memoized를 의미
이전에 계산한 값을 재사용한다는 의미
function countActiveUsers(users) {
console.log('활성 사용자 수를 세는중...');
return users.filter(user => user.active).length;
}
const [users, setUsers] = useState([
{
id: 1,
username: 'velopert',
email: 'public.velopert@gmail.com',
active: true
},
{
id: 2,
username: 'tester',
email: 'tester@example.com',
active: false
},
{
id: 3,
username: 'liz',
email: 'liz@example.com',
active: false
}
]);
const count = useMemo(() => countActiveUsers(users), [users]);
출처) https://react.vlpt.us/basic/17-useMemo.html
DOM Selector 함수인 getElementById, querySelector과 같은 기능
DOM을 직접 선택해야 하는 상황에서 사용
바람직한 사용
const select = useRef()
<input ref={select} type="text />
console.log(select.current.0000)
해결책 => callback ref를 사용하자
const [scrollY, setScrollY] = useState(0);
const scrollHeight = useRef();
useEffect(() => { setScrollY(scrollHeight.current.offsetY);
// mount 되고 난 뒤의 시점이니까 catContainerRef.current의 값이 업데이트 된 상태
}, [])
<div ref={scrollHeight}>