簡単に切り替え可能なコンポーネントを作っています。ここでは例としてドアを作っています。あなたはドアをクリックして開き、もう一度クリックすると閉じます。ドアの外側をクリックすると、ドアも閉じます。ここthis.setState()はバインドされたイベントで正しく動作しません
私の問題はhandleClick()
方法では、state.active
はどんな、常にfalse
ではないということです。状態を設定した後でさえ、私はconsole.log
それを返します。実際のdoor
には"active"
クラスが割り当てられていますが、なぜこのメソッドは変更を認識しませんか?
export default class Door extends React.Component {
constructor() {
super()
this.state = {
active: false,
}
this.close = this.close.bind(this)
this.open = this.open.bind(this)
}
handleClick() {
if (this.state.active == false) {
this.open()
} else {
this.close()
}
}
open() {
document.body.addEventListener('click', this.close, true)
this.setState({active: true})
}
close() {
document.body.removeEventListener('click', this.close, true)
this.setState({active: false})
}
render() {
let classes = {
active: this.state.active ? 'active ' : '',
}
return (
<div onClick={this.handleClick.bind(this)} className={"door " + classes.active}>
</div>
)
}
}
私はコンテナが問題を抱えていると思っています。それは基本的にDoorコンポーネントをリセットするものです。コンテナからコードを共有できますか? –
@JeffSiverそれはdivです。私は状態が変更されることを明確にすべきですが、 'handleClick'は変更を見ません。 –
私は、このコンポーネントのReact Containerが新しいコンポーネントを作成しているため、状態がリセットされている可能性があります。それはあなたが見ている行動を説明するでしょう。だからこそ、Reactコンポーネントを含むコードを共有できるかどうかを尋ねました(私は明確ではありませんでしたが、残念です)。 –