리액트에서는 반복되는 로직이나 중복되는 코드를 우리만의 훅, 즉 커스텀 훅을 통해서 관리할 수 있다.
커스텀 훅을 만들때 이름은 내 마음대로 해도 상관이 없으나, 단! 파일의 이름 앞에 "use"라는 키워드를 붙여줘야 한다!
Problem
Input 영역이 많아서 코드가 길어지고 있다. useInput 적용해줄 부분은 아래와 같다.
// As Is
const Write = () => {
const navigate = useNavigate();
const [title, setTitle] = useState("");
const [contents, setContents] = useState("");
{...}
<div>
Data Title:
<input
type="text"
value={title}
onChange={(e) => {
setTitle(e.target.value);
}}
/>
</div>
<div>
Contents Summary:
<input
type="text"
value={contents}
onChange={(e) => {
setContents(e.target.value);
}}
/>
</div>
{...}
Solve
- useInput이라는파일과 훅을 만들고 export 해준다.
- 필요한 곳에 import 해주고 아래와 같이 적용, 나머지 코드들도 중복되는 부분들은 리팩토링 해준다.
// src/hooks/useInput.js
import React, { useState } from "react";
const useInput = () => {
// use useState to manage value
const [value, setValue] = useState("");
const handler = (e) => {
setValue(e.target.value);
};
// when it's returned, it comes with value first and handler after.
return [value, handler];
};
export default useInput;
import useInput from "../axios/hooks/useInput";
{...}
// useInput: using custom hook
const [title, onChangeTitleHandler] = useInput();
const [contents, onChangeContentsHandler] = useInput();
{...}
<div>
Data Title:
<input
type="text"
value={title}
onChange={onChangeTitleHandler}
/>
</div>
<div>
Contents Summary:
<input
type="text"
value={contents}
onChange={onChangeContentsHandler}
/>
</div>
{...}
'What I Learnd > TIL' 카테고리의 다른 글
TIL - .env 사용해서 API서버의 URL 코드상에서 숨기는 법 (0) | 2023.07.15 |
---|---|
TIL - 왜 새 정보를 보여주지 않는거야 (async → await) (0) | 2023.07.14 |
TIL - 상태로 data값 관리해서 불러오기 (useState, useEffect, 비동기작업) (1) | 2023.07.13 |
TIL - Redux Ducks Pattern 정리! (0) | 2023.07.09 |
TIL - REST API 개념과 예시 (0) | 2023.07.08 |