以下問題的最佳做法是什麼?React.Js:在執行onClick時防止同級事件的兄弟姐妹
我有一個父組件(局)和四個子組件(GameButton)這是一個可以點擊的按鈕。按鈕點擊照亮按鈕0.5秒,然後將按鈕轉回到初始樣式。我想在一個按鈕點亮時防止對其他按鈕的任何點擊。
class GameButton extends React.Component {
constructor(){
super();
this.state = {
illuminated:false,
};
this.playButton = this.playButton.bind(this);
}
playButton(){
if (this.props.gameActive && this.props.clickable){
// lock all other buttons until this function is done executing
this.props.toggleButtonAccess();
console.log(this.props.clickable);
// pass the second state update in a callback function to ensure delayed execution
this.setState({illuminated:true}, function() {
// arrow function to prevent binding of this to window
window.setTimeout(() => {
this.setState({illuminated: false});
this.props.toggleButtonAccess();
console.log(this.props.clickable);
},500);
});
}
}
render() {
var buttonStyle = this.props.colorClass;
if (this.state.illuminated){
buttonStyle += " illuminated-" + this.props.color;
console.log(buttonStyle);
}
return (
<div className={buttonStyle} onClick={this.playButton}></div>
);
}
}
class Board extends React.Component {
constructor(){
super();
this.state = {
gameActive:true,
};
this.toggleButtonAccess = this.toggleButtonAccess.bind(this);
}
toggleButtonAccess(){
this.clickable = (this.clickable) ? false : true;
}
render() {
return (
<div className ="game-container">
<GameButton colorClass="game-btn green" color="green" clickable={this.clickable} toggleButtonAccess={this.toggleButtonAccess}/>
<GameButton colorClass="game-btn red" color="red" clickable={this.clickable} toggleButtonAccess={this.toggleButtonAccess}/>
<GameButton colorClass="game-btn yellow" color="yellow" clickable={this.clickable} toggleButtonAccess={this.toggleButtonAccess}/>
<GameButton colorClass="game-btn blue" color="blue" clickable={this.clickable} toggleButtonAccess={this.toggleButtonAccess}/>
</div>
);
}
}
到目前爲止,我設法由有父(局)組成的財產this.clickable,然後切換和關閉它每一個按鈕被點擊與toggleAccessButton()時間去做。但是,這不起作用。有一個更好的方法嗎?
你應該讓'clickable'成爲父狀態的一部分。此外,'button' HTML元素具有'disabled'屬性,如果其中的表達式計算爲'true',則該屬性將被禁用。所以你的'GameButton'可以在渲染的''button'中有'disabled = {this.props.clickable}'。 – glhrmv