我正在學習React。在我編寫的測試應用程序中,我使用onClick方法呈現了一些按鈕。當它們像這樣呈現時,它們工作並按照預期的方式調用selectMode函數。React Components中的綁定事件處理程序在呈現時觸發onClick
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>
)
}
但是,當我嘗試下面的方法所示,通過在構造函數中結合所建議的最佳實踐,在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>
)
}
使用元素的屬性是傳遞這些參數的好方法。我太新了,沒有想到這一點,也沒有看到覆蓋傳遞參數的例子。 – MartinDuo