[React] CustomHook ๐Ÿ‘‰ useInput

์Šน๋ฏธ๋‹ˆยท2021๋…„ 7์›” 10์ผ
0

React

๋ชฉ๋ก ๋ณด๊ธฐ
7/10

https://nomadcoders.co ์—์„œ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์ •๋ฆฌํ•œ ๋‚ด์šฉ ์ž…๋‹ˆ๋‹ค.

1. useInput์ด๋ž€?

  • input์„ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.

2. ๊ธฐ๋ณธ์ ์ธ useInput

import React, {useState} from "react";
import ReactDOM from "react-dom";

const useInput = (inititalValue) => {
	const[value, setValue] = useState(initialValue);
  	const onChange = (e) => {
    	
    	}
  	return { value, onChange }
};

const App = () => {
  	const name = useInput("Lee");
	return (
          <div className="App">
          	<h1> hello </h1>
      		// <input placeholder="Name" value={name.value} onChange={name.onChange}/>
		// <input placeholder="Name" value={...name}/>
		// ๋„ˆ๋ฌด ๊ธธ์–ด์ง€๋ฏ€๋กœ ๋ชจ๋‘ unpack ํ•ด์คŒ
 		<input placeholder="Name {...name}>
          </div>
    ) 
}

3. ์œ ํšจ์„ฑ ๊ฒ€์ฆ ์ถ”๊ฐ€

  • hook๊ณผ๋Š” ๊ด€๊ณ„ ์—†์Œ!
  • useInput์„ hook ํด๋”์— ๋ถ„๋ฆฌํ–ˆ๋‹ค
import React, { useState } from "react";

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

export default useInput;

4. 3๋ฒˆ ์‚ฌ์šฉ

import React from "react";
// ๋ถ„๋ฆฌ ํ–ˆ์œผ๋ฏ€๋กœ import ํ•ด์„œ ์‚ฌ์šฉ 
import useInput from "./Hooks/useInput";

const App = () => {
  const maxLen = value => value.length <= 10;
  // const restrictChar = value => !value.includes("@");

  const name = useInput("Lee", maxLen);

  return (
    <div className="app">
      <input placeholder="Name" {...name} />
    </div>
  ) 
}

export default App;

์™„๊ฐ• ํ›„์— ์—ฌ์œ ๊ฐ€ ์žˆ์œผ๋ฉด ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ฒ€์ฆ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด๋ณผ ๊ฒƒ์ด๋‹ค.

profile
Web Frontend Developer

0๊ฐœ์˜ ๋Œ“๊ธ€