코드가 한가지의 기능만 하도록 각 관심사에 따라 코드를 분리하는 기법이다. 특정한 변화에 대응하기 위해 수정해야 하는 코드의 단위가 줄어들어 유지 보수에 용이하게 된다.
컴포넌트를 만들다보면, 반복되는 로직이 자주 발생한다. 예를 들어서 input 을 관리하는 코드는 관리 할 때마다 꽤나 비슷한 코드가 반복되곤 한다. 그러한 상황에서는 함수단위로 로직을 각각 분리 할 수 있는 custom hook을 만들어 사용하면 아래와 같은 장점을 얻을 수 있다
import { useState } from "react";
//hook의 이름은 꼭 use로 시작해야 된다.
export function useInput(initialValue, submitAction) {
const [inputValue, setInputvalue] = useState(initialValue);
const handleChange = (e) => {
setInputvalue(e.target.value);
};
const handleSubmit = () => {
setInputvalue("");
submitAction(inputValue);
};
//app.js에서 사용할 변수들은 return 안에 입력한다.
return [inputValue, handleChange, handleSubmit];
App.js 파일
function displayMessage(message) {
alert(message);
}
function App() {
//useInput 파일에서 return했던 변수들은 import 해준다.
const [inputValue, handleChange, handleSubmit] = useInput(
"안녕", (초기값)
displayMessage,
);
return (
<div>
<h1>useInput</h1>
<input value={inputValue} onChange={handleChange} />
<button onClick={handleSubmit}>확인</button>
</div>
);
}
export default App;