티스토리 뷰

Study/react.js

[react Hooks] use Input

빛장 2020. 1. 13. 16:24

useInput 함수를 통하여 제어하는 예제.

https://youtu.be/s6KmBH1Ew4Q

 

글자수 제한.

const useInput = (initialValue, validator) => {
  const [value, setValue] = useState(initialValue);
  const onChange = event => {
    const {target:{value}} = event;  //const value = event.target.value 와 같음
    let willUpdate = true;
    if(typeof validator === "function"){
      willUpdate = validator(value)
    }
    if(willUpdate){
      setValue(value)
    }
  };
  return { value, onChange };
};

기본값인 initialValue 와 함수 자체를 받는 validator 을 인자로 가지고 있다.

useState 를 이용하여 기본값을 initialValue 로 설정해 놓는다.

 

인풋에 onChange 이벤트가 발생할경우,

이벤트가 일어난 곳을 찾아서 value 상수에 event.target.value 를 담는다.

willUpdate는 기본값으로 true를 갖는다.

만약 validator 의 타입이 function 이라면

willUpdate의 값에 validator의 value 를 대입한다.

그리고

willUpdate가 true라면, 인풋의 상태(state)에 아까 담은 value를 넣는다.

마지막으로 useState의 value, onChange 함수를 리턴한다. 

 

const App = () => {
  const maxLen = (value) => value.length <= 10
  const name = useInput("Mr.", maxLen);
  return (
    <div className="App">
      <h1>Hello</h1>
      <input placeholder="Name" value={name.value} onChange={name.onChange} />
    </div>
  );
};

maxLen 함수는 인자를 하나 받고 그 인자의 길이가 10 이하일때 true를 반환한다.

name 은 useInput에 문자열과 maxLen 함수를 집어넣고 실행한다.

 

input의 기본 값은 name의 value 즉 위에서 입력한 "mr." 이며,

onChange 이벤트가 발생할때마다 maxLen 함수가 실행되어

그때마다 조건을 검사하여 true혹은 false를 반환하여 useInput의 validator(value) 에 넣는다.

'Study > react.js' 카테고리의 다른 글

[노드패키지매니져]npm 과 npx 의 차이점  (0) 2020.01.27
[react]useRef 사용  (0) 2020.01.14
[react] 여러개의 인풋 관리  (0) 2020.01.14
[react router]리액트 라우터  (0) 2020.01.07
useEffect 변화의 감지  (0) 2019.12.29
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/02   »
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
글 보관함