$ yarn add react-hook-form
react-hook-formを使わずに書いた場合 1
import './App.css'; import { useState } from 'react'; function App() { const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const handleSubmit = (e) => { e.preventDefault(); console.log({ email, password, }); }; const handleChangeEmail = (e) => { setEmail(e.target.value); }; const handleChangePassword = (e) => { setPassword(e.target.value); }; return ( <div className="App"> <h1>login</h1> <form onSubmit={handleSubmit}> <div> <label htmlFor="email">Email</label> <input id="email" name="email" value={email} onChange={handleChangeEmail} /> </div> <div> <label htmlFor="password">パスワード</label> <input id="password" name="password" value={password} onChange={handleChangePassword} type="password" /> </div> <div> <button type="submit">Login</button> </div> </form> </div> ); } export default App;
react-hook-formを使わずに書いた場合 2
import './App.css'; import { useRef } from 'react'; import function App() { const emailRef = useRef(null); const passwordRef = useRef(null); const handleSubmit = (e) => { e.preventDefault(); console.log({ email: emailRef.current.value, password: passwordRef.current.value, }); }; // const handleChangeEmail = (e) => { // setEmail(e.target.value); // }; // const handleChangePassword = (e) => { // setPassword(e.target.value); // }; return ( <div className="App"> <h1>login</h1> <form onSubmit={handleSubmit}> <div> <label htmlFor="email">Email</label> <input id="email" name="email" ref={emailRef} /> </div> <div> <label htmlFor="password">パスワード</label> <input id="password" name="password" ref={passwordRef} type="password" /> </div> <div> <button type="submit">Login</button> </div> </form> </div> ); } export default App;
### react-hook-formを使った場合
import './App.css'; import { useForm } from 'react-hook-form'; function App() { const { register, handleSubmit } = useForm(); const onSubmit = (data) => console.log(data); return ( <div className="App"> <h1>login</h1> <form onSubmit={handleSubmit(onSubmit)}> <div> <label htmlFor="email">Email</label> <input id="email" {...register('email')} /> </div> <div> <label htmlFor="password">パスワード</label> <input id="password" {...register('password')} type="password" /> </div> <div> <button type="submit">Login</button> </div> </form> </div> ); } export default App;
registerに入っている値
const { name, ref, onChange, onBlur } = register('email'); //略 <input id="email" name={name} onChange={onChange} onBlur={onBlur} ref={ref} />