RadioButton click TypeError: Cannot read property 'setState' of undefined
RadioButton click TypeError: Cannot read property 'setState' of undefined
我正在尝试根据单击的单选按钮设置状态。
我的代码:
import React, { Component } from 'react';
class MyApp extends Component {
state={
name: "SomeName",
radio: "some"
}
onRadioChange(e) {
this.setState({name:"New Name"});
// this.setState({
// [e.target.name]: e.target.value;
// })
}
render() {
return (
<div style={{marginBottom:"50px"}}>
<input type="radio" onChange = {this.onRadioChange}
value="JonSnow"
name="radio1" />
<label>JonSnow</label>
<input type="radio" onChange = {this.onRadioChange}
value="Cleopatra"
name="radio1"/>
<label>Cleopatra</label>
</div>
);
}
}
export default MyApp;
每当我点击单选按钮时,我都会得到一个错误:
TypeError: Cannot read property 'setState' of undefined
我做错了什么?
为了使用this
关键字,您需要绑定方法。或者作为解决方法,您可以使用 arrow function
。
像这样:
onRadioChange = (e) => {
this.setState({name:"New Name"});
// this.setState({
// [e.target.name]: e.target.value;
// })
}
这里有两种选择。使用箭头函数或将函数绑定到构造函数中的 this
。
为什么不起作用?
这是因为要在任何地方使用 setState,您必须有权访问 this
。
箭头函数不需要显式绑定到 this
,因为这是实现您想要的目标的较短选择。 (他们预先绑定到this
)。
第一个选项:
onRadioChange = (e) => {
this.setState({ name: 'newName' });
}
第二个选项:
class MyApp extends React.Component {
constructor(props) {
super(props);
this.onRadioChange = this.onRadioChange.bind(this);
};
}
我正在尝试根据单击的单选按钮设置状态。
我的代码:
import React, { Component } from 'react';
class MyApp extends Component {
state={
name: "SomeName",
radio: "some"
}
onRadioChange(e) {
this.setState({name:"New Name"});
// this.setState({
// [e.target.name]: e.target.value;
// })
}
render() {
return (
<div style={{marginBottom:"50px"}}>
<input type="radio" onChange = {this.onRadioChange}
value="JonSnow"
name="radio1" />
<label>JonSnow</label>
<input type="radio" onChange = {this.onRadioChange}
value="Cleopatra"
name="radio1"/>
<label>Cleopatra</label>
</div>
);
}
}
export default MyApp;
每当我点击单选按钮时,我都会得到一个错误:
TypeError: Cannot read property 'setState' of undefined
我做错了什么?
为了使用this
关键字,您需要绑定方法。或者作为解决方法,您可以使用 arrow function
。
像这样:
onRadioChange = (e) => {
this.setState({name:"New Name"});
// this.setState({
// [e.target.name]: e.target.value;
// })
}
这里有两种选择。使用箭头函数或将函数绑定到构造函数中的 this
。
为什么不起作用?
这是因为要在任何地方使用 setState,您必须有权访问 this
。
箭头函数不需要显式绑定到 this
,因为这是实现您想要的目标的较短选择。 (他们预先绑定到this
)。
第一个选项:
onRadioChange = (e) => {
this.setState({ name: 'newName' });
}
第二个选项:
class MyApp extends React.Component {
constructor(props) {
super(props);
this.onRadioChange = this.onRadioChange.bind(this);
};
}