在调用onSubmit时,确定如何绑定到组件

时间:2017-09-15 12:04:06

标签: javascript reactjs

在我的组件中,我尝试调用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));
});

2 个答案:

答案 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>