【发布时间】:2018-02-17 02:17:55
【问题描述】:
我一生都无法弄清楚以下代码有什么问题,当用户通过 BugAdd 表单添加错误时,值将传递给 handleSubmit 函数,该函数又应将其 props 传递给 addBug。
但是,当我提交表单时,我看到了 'console.log("Adding bug:", bug);'
但在此之后我收到“react.min.js:14 Uncaught TypeError: Cannot read property 'bugs' of undefined”,我最初的想法是我可能在某个地方错过了 .bind。
谁能发现我的代码有问题,在重构为 ES6 之前它运行良好
class BugAdd extends React.Component {
render() {
console.log("Rendering BugAdd");
return (
<div>
<form name="bugAdd">
<input type="text" name="owner" placeholder="Owner" />
<input type="text" name="title" placeholder="Title" />
<button onClick={this.handleSubmit.bind(this)}>Add Bug</button>
</form>
</div>
)
}
handleSubmit(e) {
e.preventDefault();
var form = document.forms.bugAdd;
this.props.addBug({owner: form.owner.value, title: form.title.value, status: 'New', priority: 'P1'});
// clear the form for the next input
form.owner.value = ""; form.title.value = "";
}
}
class BugList extends React.Component {
constructor() {
super();
this.state = {
bugs: bugData
}
}
render() {
console.log("Rendering bug list, num items:", this.state.bugs.length);
return (
<div>
<h1>Bug Tracker</h1>
<BugFilter />
<hr />
<BugTable bugs={this.state.bugs} />
<BugAdd addBug={this.addBug} />
</div>
)
}
addBug(bug) {
console.log("Adding bug:", bug);
// We're advised not to modify the state, it's immutable. So, make a copy.
var bugsModified = this.state.bugs.slice();
bug.id = this.state.bugs.length + 1;
bugsModified.push(bug);
this.setState({bugs: bugsModified});
}
}
【问题讨论】:
-
你没有绑定
this.addBug。 -
第二个组件的 addBugs 方法怎么发现自己在第一个的斜坡上?
-
您可能想发布您的旧工作代码,以便我们了解您的意图。
-
@ivarni - 伙计...至少我怀疑是对的,即使我看不到它!
-
@James 当您查看代码足够长的时间时,有时很难发现这些东西。正如其中一个答案所建议的那样,您应该在构造函数中绑定函数,这样就不必在每次组件呈现时都绑定它。
标签: reactjs