UseInput

const useInput = (initialValue) => {
  const [value, setValue] = useState(initialValue);
  const onChange = (event) => {
    console.log(event.target);
  };
  return { value, onChange };
};
const App = () => {
  const name = useInput("Mr.");
  return (
    <div className="App">
      <input placeholder="Name" {...name} />
    </div>
  );
};

{...name}은 value={name.value} onchange={name.onChange}을 name안에있는 모든것을을 unpack한것.!



UseInput part Two

const useInput = (initialValue, validator) => {
  const [value, setValue] = useState(initialValue);
  const onChange = (event) => {
    const {
      target: { value },
    } = event;
    let willUpadate = true;
    if (typeof validator === "function") {
      willUpadate = validator(value);
    }
    if (willUpadate) {
      setValue(value);
    }
  };
  return { value, onChange };
};
const App = () => {
  const name = useInput("Mr.");
	const maxlen=(value)=>!value.includes(@);
  return (
    <div className="App">
      <input placeholder="Name" {...name} />
    </div>
  );
};

const maxlen=(value)=>!value.includes(“@”);를 추가하여 @들어가면 업데이트 불가능하게 해준다.