gpt4 book ai didi

javascript - React onchange 事件 : this. setState() 未设置状态?

转载 作者:行者123 更新时间:2023-12-03 00:11:33 25 4
gpt4 key购买 nike

当用户在用户名和密码字段中输入值时,我尝试通过用户名和密码的 this.setState() 设置状态。我正在使用 onChange 事件类型

ISSUE: the state is not changing. I log this.state.data.username in the render().

import React, { Component } from "react";
import { Form, Button } from "react-bootstrap";
import { Link } from "react-router-dom";

var Joi = require("joi-browser");

class Login extends Component {
state = {
data: { username: "a", password: "b " },
errors: {
email: "ddsfds",
password: "aaaa"
}
};

schema = {
username: Joi.string()
.min(0)
.required()
.label("Username"),
password: Joi.string()
.required()
.label("Password")
};

handleSubmit = event => {
event.preventDefault();
console.log("submited.", event.target);

const { data } = this.state;

const { err } = Joi.validate(data, this.schema);

if (err) {
console.log("error is true", err);
} else {
console.log("not true");
}
};

handleEmailOnChange = event => {
const inputUsername = event.target.value;
console.log("input is...", inputUsername);

this.setState({ username: inputUsername });
};

handlePassword = event => {
const passwordInput = event.target.value;

this.setState({ password: passwordInput });
};

render() {
console.log("username ", this.state.data.username);
return (
<div id="form-wrapper">
<Form>
<Form.Group controlId="formBasicEmail">
<h4>Sign In</h4>
<Form.Control
type="email"
placeholder="Enter email"
onChange={this.handleEmailOnChange}
/>
{/* <span>{this.state.errors.username} </span> */}
</Form.Group>

<Form.Group controlId="formBasicPassword">
<Form.Control
type="password"
placeholder="Password"
onChange={this.handlePassword}
/>
</Form.Group>

<div id="register-wrapper">
<Link to="/register" type="button" className="btn btn-warning">
Register Account
</Link>
<Button
variant="primary"
className="m-2"
type="submit"
onClick={this.handleSubmit}
>
Submit
</Button>
</div>
</Form>
</div>
);
}
}

export default Login;

最佳答案

您没有正确更新状态或没有正确使用它。构造函数中的状态具有带有用户名密码

的数据对象
 handleEmailOnChange = event => {
const inputUsername = event.target.value;
console.log("input is...", inputUsername);

this.setState(prev => ({data: {...prev.data, username: inputUsername } }));
};

handlePassword = event => {
const passwordInput = event.target.value;
this.setState(prev => ({data: {...prev.data, password: passwordInput } }));
};

关于javascript - React onchange 事件 : this. setState() 未设置状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54703648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com