【发布时间】:2017-02-03 04:14:36
【问题描述】:
我正在学习 React。在我正在编写的测试应用程序中,我正在使用 onClick 方法呈现一些按钮。当它们像这样呈现时,它们会在单击时按预期工作并调用 selectMode 函数。
constructor(props) {
super(props);
this.state = { mode: 'commits', commits: [], forks: [], pulls: [] };
}
...
selectMode(mode) {
this.setState({ mode });
}
render() {
...
return (<div>
<button onClick={this.selectMode.bind(this, 'commits')}>Show Commits</button><br/>
<button onClick={this.selectMode.bind(this, 'forks')}>Show Forks</button><br/>
<button onClick={this.selectMode.bind(this, 'pulls')}>Show Pulls</button>
</div>
)
}
但是当我尝试下面显示的建议的最佳实践方式时,通过在构造函数中绑定,在渲染组件时会调用 3 次 selectMode 函数。为什么会调用 onClick 事件处理程序?我有什么问题?
constructor(props) {
super(props);
this.state = { mode: 'commits', commits: [], forks: [], pulls: [] };
this.selectMode = this.selectMode.bind(this)
}
...
selectMode(mode) {
this.setState({ mode });
}
render() {
...
return (<div>
<button onClick={this.selectMode('commits')}>Show Commits</button><br/>
<button onClick={this.selectMode('forks')}>Show Forks</button><br/>
<button onClick={this.selectMode('pulls')}>Show Pulls</button>
</div>
)
}
【问题讨论】: