学習リアクトは少しノービーな質問かもしれません。このコードを考えてみましょう:コンテナ内のボタンがhandleButtonToggle()
をクリックしたときにあなたが現在見ることができるように純粋なリアクトの状態変化にアクションを結びつける
class Application extends React.Component {
render() {
return <Container />
}
}
class Container extends React.Component {
constructor(props) {
super(props)
this.state = {
isOn: false
}
this.handleToggle = this.handleToggle.bind(this);
}
handleToggle(on) {
this.setState({
isOn: on
});
}
render() {
return (
<div>
<p>
{this.state.isOn ? 'on' : 'off'}
</p>
<MyButton handleToggle={this.handleToggle} />
</div>
);
}
}
class MyButton extends React.Component {
constructor(props) {
super(props);
this.state = {
pressed: false
}
this.handleButtonToggle = this.handleButtonToggle.bind(this);
}
handleButtonToggle() {
const on = !this.state.pressed
this.setState({
pressed: on
});
this.props.handleToggle(on);
}
render() {
return (
<div>
<button onClick={this.handleButtonToggle}>
{this.state.pressed ? "pressed" : "depressed"}
</button>
</div>
);
}
}
ReactDOM.render(<Application />, document.getElementById('app'));
は、ボタン自体の状態を変更して、親コンテナの状態を変更する関数を呼び出す発射されます。これはそれを行うための反作法ですか?現時点では、コンテナの状態は、handleButtonToggle
関数が起動されたときに変更されます。理想的には、Containerの状態をMyButton の状態に直接依存させたいと考えています(将来はボタンの状態をhandleButtonToggle
以外に設定する方法があり、状態が変わるたびに手動でthis.props.handleToggle
を呼び出す必要はありません)。 。言い換えれば、状態が変化したときにボタンコンポーネントにthis.props.handleToggle(this.state.pressed)
のような何かをする方法があります。
後者のバージョンは、私が探しているもののようです! – redFur