やりたいこと
Formの値がバリデーションをクリアした場合に送信ボタンの色を変更する機能に関してリファクタリングしたい。
困っていること
認証に関するhooks
を次のように書きました。(sendable
がtrue
で色が変わる。)
下記のコードでフォームの値を動的に確認できていいるのですが、これだとform
が増える度にnowHome
を作成する必要があり、冗長になってしまうので
リファクタリングしたいと考えています。ご教授よろしくお願いします。
一応、formに関する他のライブラリは一旦頼らない方向性です。
javascript
1import React from "react"; 2import { useState } from "react"; 3 4type AuthInputType = { 5 name: string; 6 password: string; 7 email: string; 8}; 9 10export const useAuth = () => { 11 const [authInfo, setAuthInfo] = useState<AuthInputType>({} as AuthInputType); 12 const [sendable, setEndable] = useState(false); 13 14 const isEmailValidation = (password: string) => { 15 var reg = /[\w\-._]+@[\w\-._]+.[A-Za-z]+/; 16 if (reg.test(password)) { 17 return true; 18 } else { 19 return false; 20 } 21 }; 22 23 const onChange = (e: React.ChangeEvent<HTMLInputElement>) => { 24 const nowEmail = 25 e.target.name === "email" ? e.target.value : authInfo.email; 26 const nowPassword = 27 e.target.name === "password" ? e.target.value : authInfo.password; 28 const nowName = 29 e.target.name === "name" ? e.target.value : authInfo.name; 30 31 if (nowPassword && nowName && isEmailValidation(nowEmail)) { 32 setEndable(true); 33 } else { 34 setEndable(false); 35 } 36 setAuthInfo({ ...authInfo, [e.target.name]: e.target.value }); 37 }; 38 39 return { sendable, onChange }; 40}; 41
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。