React jsでパスワードを一致させる方法を教えてください。私は最初のパスワードが機能しているアリのデザインを使用しましたが、適合パスワードの場合、どのようにすればそれが機能しないのかという声明を出しました
handlePasswordChange = event => {
this.setState({
password: event.target.value,
});
};
handleConfirmPassword = event => {
if (event.handleConfirmPassword !== event.handlePasswordChange) {
message.error('error');
}
};
これらは楽しいですし、以下はアリのデザインです
<FormItem {...styles.formItemLayout} label="Password">
{getFieldDecorator('Password', {
rules: [{ required: true, message: 'Password is Required!' }],
})(
<Input
onChange={this.handlePasswordChange}
name="password"
type="password"
value={password}
style={styles.margin}
/>,
)}
</FormItem>
<FormItem {...styles.formItemLayout} label="Confirm Password">
{getFieldDecorator('Confirm Password', {
rules: [{ required: true, message: 'Confirm your Password!' }],
})(
<Input
name="password"
type="password"
style={styles.margin}
onChange={this.handleConfirmPassword}
/>,
)}
</FormItem>
あなたのパスワードとconfirmPasswordの両方が状態にあると仮定します。
this.state = {
password: '',
confirmPassword: ''
}
handleSubmit = () => {
const { password, confirmPassword } = this.state;
// perform all neccassary validations
if (password !== confirmPassword) {
alert("Passwords don't match");
} else {
// make API call
}
}
これを試して:
handleConfirmPassword = (event) => {
if (event.target.value !== this.state.password) {
message.error('error');
}
}
次のように状態を設定することもできます。
state = {
password: '',
confirmPassword: ''
}
そして、handleConfirmPassword
と送信で一致を確認できます。
handleConfirmPassword = (event) => {
if (event.target.value !== this.state.password) {
message.error('error');
this.setState({confirmPassword: event.target.value})
}
}
そして、フォームへの送信ハンドラ:
handleSubmit = (event) => {
if(this.state.password !== this.state.confirmPassword){
message.error("The passwords doesn't match")
return false; // The form won't submit
}
else return true; // The form will submit
}
パスワードチェックコールバックを使用できます。
checkPassword = (rule, value, callback) => {
if (value && value !== form.getFieldValue('Password')) {
callback("The passwords don't match");
} else {
callback();
}
};
スルー バリデータ ルール:
<FormItem {...styles.formItemLayout} label="Password">
{getFieldDecorator('Password', {
rules: [{ required: true, message: 'Password is Required!' }],
})(
<Input
name="password"
type="password"
value={password}
style={styles.margin}
/>,
)}
</FormItem>
<FormItem {...styles.formItemLayout} label="Confirm Password">
{getFieldDecorator('ConfirmPassword', {
rules: [
{ required: true, message: 'Confirm your Password!' },
{ validator: this.checkPassword }
],
})(
<Input
name="password"
type="password"
style={styles.margin}
/>,
)}
</FormItem>
私も2セントも投入すると思いました:)
import React, {Component} from 'react';
class Form extends Component {
constructor(props) {
super(props)
this.state = {
password: {
new: null,
match: null,
confirmed: null,
},
}
this._handleNewPassword = this._handleNewPassword.bind(this)
this._handlePasswordMatch = this._handlePasswordMatch.bind(this)
this._handleFormSubmission = this._handleFormSubmission.bind(this)
this._handleConfirmedPassword = this._handleConfirmedPassword.bind(this)
}
_handleFormSubmission({ currentTarget }) {
// Check the password
// match on form submission
this._checkPasswordForMatch().then(
({ success }) => {
if (success) {
// post data to API
}
}
)
}
// handle storing the
// new password in state
_handleNewPassword(value) {
let state = Object.assign({}, this.state)
state.password.new = value
this.setState(state)
}
// handle storing the
// confirmed password in state
_handleConfirmedPassword(value) {
if (value === this.state.password.new) {
let state = Object.assign({}, this.state)
state.password.confirmed = value;
this.setState(state);
}
}
// handle storing the
// confirmed password in state
async _handlePasswordMatch() {
let { password } = this.state;
let state = Object.assign({}, this.state);
if (password.new === password.confirmed) {
state.password.match = true
} else {
state.password.match = false
}
await this.setState(state)
return {
success: state.password.match
}
}
render() {
return (
<div
method='POST'
onFormSubmit={this._handleFormSubmission}>
<input
type='password'
name='new-password'
onChange={this._handleNewPassword}
pattern='(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,}' />
<input
type='password'
name='confirm-password'
onChange={this._handleConfirmedPassword}
pattern='(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,}' />
<button type='submit'>Submit</button>
</div>
);
}
}
export default Form;