##React onChange&Hookの挙動について
勉強の一貫でReactを使用したFormを作成しています。
inputタグにonChangeによって値を取得し、Hooksで値を保持する構成で記載しています。
しかし挙動がおかしく、下記問題を解決したいと考えています。
発生している問題・エラーメッセージ
inputタグで入力した値と、onChangeとHooksでの値保持で整合性が取れていない。
おそらくonChangeとHooksの挙動についての理解度不足だと思いますので、ご教授いただけると幸いです。
■問題ケース
[User]
・入力値 test01 (6文字入力)
→6文字入力するもエラー文が消えてくれない
[pass]
・入力値 testpass (8文字入力)
→6文字入力するもエラー文が消えてくれない
[passCheck]
・入力値 testpass (8文字入力)
→passと入力値が同じはずなのに、不一致エラーが発生。
該当のソースコード
React
1import React, { useState } from "react"; 2import ReactDOM from "react-dom"; 3 4function Form() { 5 let errorMessage = <p></p>; 6 7 const [user, inputUser] = useState(""); 8 const [pass, inputPass] = useState(""); 9 const [PassCheck, inputPassCheck] = useState(""); 10 const str = /^[0-9a-zA-Z]*$/; 11 12 const handleUserChange = (e: React.FocusEvent<HTMLInputElement>) => { 13 inputUser(e.target.value); 14 15 if (str.test(user) === false || user.length < 6 || user.length > 32) { 16 errorMessage = <p>条件と合わないためエラー</p>; 17 } else { 18 errorMessage = <p></p>; 19 } 20 ReactDOM.render(errorMessage, document.getElementById("errorUserMessage")); 21 }; 22 const handlePassChange = (e: React.ChangeEvent<HTMLInputElement>) => { 23 inputPass(e.target.value); 24 25 if (str.test(pass) === false || pass.length < 7) { 26 errorMessage = <p>条件と合わないためエラー</p>; 27 } else { 28 errorMessage = <p></p>; 29 } 30 ReactDOM.render(errorMessage, document.getElementById("errorPassMessage")); 31 }; 32 const handlePassCheck = (e: React.ChangeEvent<HTMLInputElement>) => { 33 inputPassCheck(e.target.value); 34 35 if (!(PassCheck === pass)) { 36 errorMessage = <p>不一致エラー</p>; 37 } else { 38 errorMessage = <p></p>; 39 } 40 ReactDOM.render(errorMessage, document.getElementById("errorPassCheck")); 41 }; 42 43 44 return ( 45 <form action="" id="form"> 46 <input type="text" value={user} onChange={handleUserChange} /> 47 <p id="errorUserMessage"></p> 48 <input type="text" onChange={handlePassChange} /> 49 <p id="errorPassMessage"></p> 50 <input type="text" onChange={handlePassCheck} /> 51 <p id="errorPassCheck"></p> 52 </form> 53 ); 54} 55 56export default Form; 57
試したこと
関数コンポーネントとHooksによる値管理を実施。
しかし、挙動が意図しないためクラスコンポーネントに変更するもうまくいかず。
お手数かけますが、ご教授いただけると幸いです。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー