我目前有这个简单的反应应用程序,我不能让这些onchange事件为我的生命开火。
var BlogForm = React.createClass({
getInitialState: function() {
return {
title: '',
content: ''
};
},
changeTitle: function(event) {
var text = event.target.value;
console.log(text);
this.setState({
title: event.target.value
});
},
changeContent: function(event) {
this.setState({
content: event.target.value
});
},
addBlog: function(ev) {
console.log("hit hit");
},
render: function() {
return (
<form onSubmit={this.addBlog(this)}>
<div>
<label htmlFor='picure'>Picture</label>
<div><input type='file' id='picture' value={this.state.picture} /></div>
</div>
<div>
<input className="form-control" type='text' id='content' value={this.state.title} onChange={this.changeTitle} placeholder='Title' />
</div>
<div>
<input className="form-control" type='text' id='content' value={this.state.content} onChange={this.changeContent} placeholder='Content' />
</div>
<div>
<button className="btn btn-default">Add Blog</button>
</div>
</form>
);
}
});
有趣的是,当我使用onChange={this.changeTitle (this)}
时,事件会触发,但changeTitle
函数中的ev变量不正确。
答案 0 :(得分:11)
尝试:
onChange={(evt) => this.changeTitle(evt)}
或:
onChange={this.changeTitle.bind(this)}
而不是:
onChange={this.changeTitle}
答案 1 :(得分:2)
尝试将onChange移动到父div ..这对我有用
答案 2 :(得分:0)
可接受的答案是正确的,但是我想补充一点,如果您要实现bootstrap documentation中提供的单选按钮解决方案,请确保删除周围div上的“数据切换”选项:
<div class="btn-group btn-group-toggle" data-toggle="buttons">
<label class="btn btn-secondary active">
<input type="radio" name="options" id="option1" autocomplete="off" checked> Active
</label>
</div>
如果保留上面代码中所示的data-toggle选项,将忽略您自己添加到输入字段中的onClick和onChange事件。
答案 3 :(得分:0)
使用时:
onChange={this.changeTitle (this)}
react将自动调用提到的函数。您需要像这样调用函数:
onChange={this.changeTitle}
,并将您提到的功能更改为箭头功能,否则您不能在功能中使用“ 此”关键字。在无箭头功能中,“ 此”关键字不是函数的对象,因此您无法访问变量。
如果您需要将参数传递给函数,则应使用其他方法,例如bind()