【发布时间】:2023-04-09 09:43:01
【问题描述】:
在运行我的应用程序时,当尝试使用某些表单值更新状态时,会出现以下错误消息:
“未捕获的 TypeError:this.setState 不是函数”
LoginForm.onChange
src/components/forms/LoginForm.js:21
18 | }
19 |
20 | onChange = e => {
> 21 | this.setState({
| ^ 22 | data: { ...this.state.data, [e.target.name]: e.target.value }
23 | });
24 | }
在构造函数中添加了对 onChange 的绑定(以前不存在),但这并不能解决问题。 this.onChange = this.onChange.bind(this);
我正在使用:反应:“^16.8.6”
这是组件代码:
import React from "react";
import { Form, Button } from "semantic-ui-react";
import Validator from "validator";
import InlineError from "../messages/InlineError"
class LoginForm extends React.Component {
constructor(props) {
super(props);
this.state = {
data: {
email: "",
password: ""
},
loading: false,
errors: {}
};
this.onChange = this.onChange.bind(this);
}
onChange = e => {
this.setState({
data: { ...this.state.data, [e.target.name]: e.target.value }
});
}
onSubmit = () => {
const errors = this.validate(this.state.data);
this.setState = ({ errors });
};
validate = (data) => {
const errors = {};
if (!Validator.isEmail(data.email)) errors.email = "Invalid email."
if (!data.password) errors.password = "Cannot be blank.";
return errors;
};
render() {
const { data, errors } = this.state;
return (
<Form onSubmit={this.onSubmit}>
<Form.Field>
<label htmlFor="email">Email</label>
<input
type="email"
id="email"
name="email"
placeholder="me@example.com"
value={data.email}
onChange={this.onChange}
/>
</Form.Field>
{errors.email && <InlineError text={errors.email} />}
<Form.Field>
<label htmlFor="password">Password</label>
<input
type="password"
id="password"
name="password"
placeholder="Enter your password"
value={data.password}
onChange={this.onChange}
/>
{errors.password && <InlineError text={errors.password} />}
</Form.Field>
<Button primary>Login</Button>
</Form>
);
}
}
export default LoginForm;
【问题讨论】:
-
this.onChange = this.onChange.bind(this);你不需要这样做 -
this.setState = ({ errors });这会覆盖您的onSubmit中的setState函数。 -
同意@EmileBergeron
-
@EmileBergeron 是对的。我想这是我这边的设计问题。谢谢,这让我很生气。我可能需要弄清楚如何处理。
-
我还按照@DerekPollard 的建议删除了该行。非常感谢你
标签: javascript reactjs