리액트에서 DOM을 직접 조작할 때에는 DOM 요소에 ref라는 어트리뷰트를 준다.
useRef()는 ref로 사용될 변수명을 생성할 대 사용한다. 한편 useRef()가 전역 저장소에 저장됨을 이용하여 전역 객체로서 임시로 사용할 수 있다.
const 변수명 = useRef()
<input ref={변수명}>
const onClick = () => 변수명.current.focus();
const nextId = useRef(1)
const onAddTodo = () => {
...
nextId.current += 1;
}
Flux 패턴을 사용하는 상태관리 툴을 이용하는 것이 권장된다.
함수를 반환하는 js파일을 import하여 훅처럼 사용할 수 있다.
// useInputs.js
import { useReducer } from 'react';
function reducer(state, action) {
return {
…state,
[action.name]: action.value
};
}
export default function useInputs(initialForm) {
const [state, dispatch] = useReducer(reducer, initialForm);
const onChange = e => {
dispatch(e.target);
};
return [state, onChange];
}
//form.js
import React from 'react';
import useInputs from './useInputs';
const Info = () => {
const [state, onChange] = useInputs({
name: '',
nickname: ''
});
...
}
위의 커스텀 훅은 state의 초기값을 인수로 받아 state와 onChange 함수를 반환한다.