리액트 함수형 컴포넌트로 사용자 정의 훅을 만들 수 있다.
보통 리액트에서 input값을 받을 때 state를 만들고 input이 onChange메서드가 실행될 때 state를 수정할 handle함수도 정의해야하는데 커스텀훅을 활용해서 이 handle함수와 상태값을 묶어준다면 코드가 깔끔해진다.
예시 1) 일반적인 Input에 value와 handle 함수를 엮음
//UseInput.js
import { useState } from "react"
const useInput = () => {
const [value, setValue] = useState("")
const handleInput = (e) => setValue(e.target.value)
return [value, handleInput]
}
export default useInput
//App.js
import React from 'react'
import UseInput from '../hooks/UseInput'
function App() {
const [value, handleInput] = UseInput()
return (
<div className="App">
<input value={value} onChange={handleInput}></input>
</div>
);
}
export default App;
App.js에 핸들 함수를 안넣어서 좋다. UseInput은 재사용도 가능하다.
예시 2) 유효성 검사 추가
//UseInput.js
import { useState } from "react"
const useInput = () => {
const [value, setValue] = useState("")
const [valid, setValid] = useState(false)
const handleInput = (e) => {
const text = e.target.value
setValue(text)
if(text.length > 6) setValid(true)
else setValid(false)
}
return [value, handleInput, valid]
}
export default useInput
//App.js
import React from 'react'
import UseInput from '../hooks/UseInput'
function App() {
const [value, handleInput, valid] = UseInput()
return (
<div className="App">
<input value={value} onChange={handleInput}></input>
<p>{valid ? "유효한 텍스트입니다." : "6글자 이상 하셔야 합니다."}</p>
</div>
);
}
export default App;
결과물


-
검색해보니깐 커스텀훅 내부에 useEffect()으로 setInterval넣어서 현재시각을 출력하기도 하고 jsx를 리턴하는 렌더함수를 훅에 넣어서 쓸 수도 있다.
nikgraf.github.io/react-hooks/
Collection of React Hooks
nikgraf.github.io
이 사이트에서 다양한 커스텀 훅스들을 찾아볼 수 있다.
'프로그래밍' 카테고리의 다른 글
개인용 RN 배포 매뉴얼 (0) | 2020.12.24 |
---|---|
useRef 사용용도 (0) | 2020.12.22 |
리액트 memo로 리렌더링 관리하기 (0) | 2020.12.13 |
리액트 에러 경계 (0) | 2020.12.08 |
리액트 네이티브 커스텀 폰트 적용 (0) | 2020.11.02 |