14

我目前有这个简单的反应应用程序,我无法让这些 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 变量不是正确的。

4

4 回答 4

24

尝试:

onChange={(evt) => this.changeTitle(evt)}

或者:

onChange={this.changeTitle.bind(this)}

代替:

onChange={this.changeTitle}
于 2016-01-31T16:11:56.630 回答
4

尝试将 onChange 移动到父 div ..这对我有用

于 2018-03-12T18:08:02.390 回答
0

接受的答案是正确的,但我想补充一点,如果您正在实施引导文档中提供的单选组按钮解决方案,请确保删除周围 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 事件将被忽略。

于 2019-07-11T08:33:47.310 回答
0

当你使用:

onChange={this.changeTitle (this)}

react 会自动调用提到的函数。你需要像这样调用函数:

onChange={this.changeTitle}

并将您提到的函数更改为箭头函数,否则您不能在函数中使用“ this ”关键字。在无箭头函数中,“ this ”关键字不是函数的对象,因此您无法访问变量。如果您需要将参数传递给您的函数,您应该使用其他方法,例如bind()

于 2020-04-25T07:32:18.610 回答