今していること
react.jsを使用しリアルタイムでバリデーションチェックする登録画面を作っております
問題点
パスワードの値をチェックする際に3つ条件を見る
→そこでの子コンポーネントに渡す値をまとめることはできないのか? と疑問に
コード(コード内に質問は書きました)
function PasswordBallon(props){ return ( <div className="passwordBallon">{props.NumberOfPassword} <ul> <span className="title">Password rules</span> <li>//**①以下の条件分岐を短くできないか? {(() => { if(props.NumberOfPassword == true){ return <img src="../img/check-solid.svg" style={{height:"22px"}}/> }else{ return <img src="../img/baseline-error_outline-24px.svg" /> } })()} {(() => { if(props.NumberOfPassword == true){ return <span style={{color:"#E4E7E8"}}> 8 characters minimum</span> }else{ return <span> 8 characters minimum</span> } })()} </li> <li> {(() => { if(props.CheckNumber == true){ return <img src="../img/check-solid.svg" style={{height:"22px"}}/> }else{ return <img src="../img/baseline-error_outline-24px.svg" /> } })()} {(() => { if(props.CheckNumber == true){ return <span style={{color:"#E4E7E8"}}> Contains at least 1 number</span> }else{ return <span> Contains at least 1 number</span> } })()} </li> <li> {(() => { if(props.CheckCharacter == true){ return <img src="../icon/check-solid.svg" style={{height:"22px"}}/> }else{ return <img src="../icon/baseline-error_outline-24px.svg" /> } })()} {(() => { if(props.CheckCharacter == true){ return <span style={{color:"#E4E7E8"}}> Can't be "password", "username"</span> }else{ return <span> Can't be "password", "username"</span> } })()} </li> </ul> </div> ); } class App extends React.Component { constructor() { super(); this.state = { display: false, fields: {}, errors: {}, NumberOfPassword: false, CheckNumber: false, CheckCharacter: false, }; this.passwordClick = this.passwordClick.bind(this); } passwordClick() { this.setState({ display: true }); } handleChange(field, e){ let errors = {}; let fields = this.state.fields; fields[field] = e.target.value; this.setState({fields}); if(!fields["password"]){ // formIsValid = false; errors["EmptyPassword"] = "Cannot be empty"; } if(typeof fields["password"] !== "undefined"){ if(fields["password"].match(/^.{8,}$/)){ // formIsValid = false; this.setState({NumberOfPassword: true}); }else{ this.setState({NumberOfPassword: false}); } if(fields["password"].match(/[0-9]/)){ // formIsValid = false; this.setState({CheckNumber: true}); }else{ this.setState({CheckNumber: false}); } if(fields["password"] != ("password" || "user")){ this.setState({CheckCharacter: true}); }else{ this.setState({CheckCharacter: false}); } } } ////component名は最初大文字な** render(){ return( <div className='signup'> <h1>Create Account</h1> <div><input type="text" name="name" placeholder="name"/></div> <div><input type="text" name="email" placeholder="email"/></div> <div className="wrapperPassword"> <input type="password" name="password" placeholder="password" onClick={this.passwordClick} onChange={this.handleChange.bind(this, "password")} value={this.state.fields["password"]} /> { this.state.display ? <PasswordBallon //**②ここのpasswordの条件をチェックするstateをまとめられないか?? NumberOfPassword = {this.state.NumberOfPassword} CheckNumber = {this.state.CheckNumber} CheckCharacter = {this.state.CheckCharacter} />: null } </div> <div><input type="text" name="passConfirm" placeholder="confirm password"/></div> </div> ); } } ReactDOM.render( <App/>, document.getElementById('wrapper') ); })();
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/22 22:10
退会済みユーザー
2018/08/24 01:13
2018/08/24 01:51
退会済みユーザー
2018/08/24 02:47