在我的组件中,我尝试调用handleChange和handleSubmit组件的函数
如果我像forms example那样渲染,
<form onSubmit={this.handleSubmit}>
<input type="text" value={this.state.value} onChange={this.handleChange} placeholder="Enter new title"/>
<input type="submit" value="Submit" />
</form>
在onChange()中,this
无法绑定到该组件,我无法调用this.setState
,因此我将其绑定到onChange = {()=&gt ; this.handleChange}。
对于onSubmit()
,我有相同的绑定问题,但是当我绑定它时,不会调用处理程序,并重新加载页面。提交时绑定到组件的正确方法是什么?
TIA
完整示例:
class CbList extends React.Component {
constructor() {
super();
this.state = {
newTitle: '',
list: []
};
}
handleChange(event) {
this.setState(Object.assign({},
this.state,
{ newTitle: event.target.value }));
}
handleSubmit(event) {
this.addBlock(this.state.newTitle);
event.preventDefault();
return false;
}
render() {
return (
<div className="cb-list">
<div>
<form onSubmit={() => this.handleSubmit}>
<input type="text" value={this.state.value} onChange={() => this.handleChange}
placeholder="Enter new title"/>
<input type="submit" value="Submit" />
</form>
</div>
</div>
);
}
addBlock(title) {
let updatedList = this.state.list.concat({ title: title });
this.setState({ list: updatedList })
}
};
$(function() {
ReactDOM.render(<CbList/>, $('#home').get(0));
});
答案 0 :(得分:2)
你忘了调用这些函数:
onSubmit={()=>this.handleSubmit}
应该是
onSubmit={()=>this.handleSubmit()}
或者,只需传递对函数的引用:
onSubmit={this.handleSubmit}
但是你需要在构造函数中绑定你的函数(如表单示例链接中所示):
this.handleSubmit = this.handleSubmit.bind(this);
答案 1 :(得分:0)
您需要bind
构造函数上的事件处理程序,以便您可以在其他事件中使用它们。
constructor(props) {
super(props)
this.handleSubmit = this.handleSubmit.bind(this)
this.handleChange = this.handleChange.bind(this)
}
此外,当您将其用作道具时,您不需要箭头功能。
<form onSubmit={this.handleSubmit}>
<input
type="text"
value={this.state.value}
onChange={this.handleChange}
placeholder="Enter new title"
/>
<input type="submit" value="Submit" />
</form>