일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 프로그래머스
- 자바스크립트
- 백준
- 데이터모델링과마이닝
- 리액트 훅
- 코틀린
- 리액트
- useState
- 디자인 패턴
- 장고
- react firebase
- 프로그래머스 완전탐색
- 컴퓨터 네트워크
- react hook
- 프로그래밍 언어론
- 코딩테스트 고득점 Kit 완전탐색
- 프로그래머스 자바
- useEffect
- React JS
- design pattern
- react
- 코딩테스트 고득점 Kit
- 자바
- JavaScript
- Java
- vanillaJS
- NextJS
- websocket
- codesandbox
- 자바 공부
Archives
- Today
- Total
기록하는 개발자
[React] React Hook-1.1 useState를 활용한 useInput 본문
728x90
useInput
- input 내용과 그에 따른 이벤트를 useState hooks를 통해 관리할 수 있다.
< useState를 활용한 useInput >
import React, { useState } from "react";
import ReactDOM from "react-dom";
import "./styles.css";
const useInput = (initialValue, validator) => {
const [value, setValue] = useState(initialValue);
const onChange = (event) => {
const {
target: { value }
} = event;
// 위와 동일 : const { value } = event.target;
let willUpdate = true;
if (typeof validator === "function")
willUpdate = validator(value);
if (willUpdate)
setValue(value);
else alert("max length of name is 10");
};
return { value, onChange };
};
export default function App() {
const maxLength = (value) => value.length < 10;
const name = useInput("Mr.", maxLength);
return (
<div className="App">
<h1>By Hooks</h1>
<input placeholder="Name" {...name} />
{/* 위와 동일 : <input placeholder="Name" value={name.value} onChange={name.onChange}/> */}
</div>
);
}
< useInput >
const useInput = (initialValue, validator) => {
const [value, setValue] = useState(initialValue);
const onChange = (event) => {
const {
target: { value }
} = event;
// 위와 동일 : const { value } = event.target;
let willUpdate = true;
if (typeof validator === "function")
willUpdate = validator(value);
if (willUpdate)
setValue(value);
else alert("max length of name is 10");
};
return { value, onChange };
};
1.
const [value, setValue] = useState(initialValue);
- useState를 initialValue로 초기화한다.
→ value가 initialValue로 초기화된다.
2.
const onChange = (event) => {
const {
target: { value }
} = event;
// 위와 동일 : const { value } = event.target;
- event 발생 대상을 value 변수에 저장한다.
3.
let willUpdate = true;
if (typeof validator === "function")
willUpdate = validator(value);
- 인자로 전달받은 validator의 type이 function이 맞는 경우 validator를 통해 value를 검증한 값으로 willUpdate를 초기화 한다.
ex) validator 함수가 value의 길이가 10 이하인지 검사하는 함수일 때, 만약 value가 10보다 크다면 willUpdate는 false로 초기화 된다.
4.
if (willUpdate)
setValue(value);
else alert("max length of name is 10");
};
- willUpdate가 true인 경우 setValue 함수를 이용하여 value값을 초기화 시킨다.
- willUpdate가 false인 경우 alert 함수를 사용하여 메시지를 보여준다.
5.
return { value, onChange };
- value와 onChange 함수를 return 한다.
< App() >
export default function App() {
const maxLength = (value) => value.length < 10;
const name = useInput("Mr.", maxLength);
return (
<div className="App">
<h1>By Hooks</h1>
<input placeholder="Name" {...name} />
{/* 위와 동일 : <input placeholder="Name" value={name.value} onChange={name.onChange}/> */}
</div>
);
}
- initialValue로 "Mr.", validator함수로 maxLength를 useInput의 인자로 전달한다.
- 초기값으로 Mr. 를 입력으로 준 상태에서 이름을 입력 받는다.(초기값을 지운 후 이름 입력 가능)
- validator를 활용하여 10글자 이상이 입력되면 alert가 발생한다.
→ 이처럼 useState는 다른 function에서 이벤트를 처리할 수 있도록 해준다.
728x90
'Web > React' 카테고리의 다른 글
[React] React Hook-2.0 useEffect (0) | 2021.09.30 |
---|---|
[React] React Hook-1.2 useState를 활용한 useTabs (0) | 2021.09.29 |
[React] React Hook-1.0 useState (0) | 2021.09.29 |
[React] Movie Rating Web Service-2.0. Detail page, About page 만들기 (0) | 2021.09.25 |
[React] Movie Rating Web Service-1.0.movie json api 가져오기 (0) | 2021.09.23 |