繁体   English   中英

从子级更改父级的一部分 - React.js

[英]Change part of parent from child - React.js

我知道有类似的问题,但没有人回答我的问题。 可视化这里的问题就是它的样子。

在此处输入图片说明

好的,所以我有以下问题:单击 Left 组件后,我想将 Body 更改为 BodyLeftClicked,单击 Right 组件后,我想将 Body 更改为 BodyRightClicked。

我有这样的 App 组件:

class App extends React.Component {
    state = { choose: "Left" }; //initialize one body

    render() {
        return (
            <div className="All">
                <div className="head">
                    <Top name={"Left"}/>
                    <Top name={"Right"}/>
                </div>

                <div className="body">
                    {(() => {
                        switch(this.state.choose) {
                            case "Left":
                                 return <BodyLeftClicked choose={this.state.choose}/>;
                            case "Right":
                                return <BodyRightClicked choose={this.state.choose}/>;
                        }
                    })()}

                </div>
            </div>
        );
    }
}

页面顶部的两个组件(左组件和右组件)由:

class Top extends React.Component {
    constructor(props) {
        super(props);
        this.state = { name : this.props.name };
        this.onButtonClick = this.onButtonClick.bind(this);
    }

    onButtonClick() {
        //CHANGE THE BODY WHICH IS BEING SHOWN IN APP 
    }

    render() {
        return (
            <div>
                <button className="Button" type="button" onClick={this.onButtonClick}>{this.state.name}</button>
            </div>
        )
    }
}

和身体组件的例子:

class BodyLeftClicked extends React.Component {
constructor(props) {
        super(props);
        this.state = { choose : this.props.choose };
    }
    render() {
        return (
            <div className="BodyLeftClicked">  </div>
        )
    }
}

您基本上希望在 App 类中创建一个方法并将其传递给您的 Left/Right 组件。 在方法中使用setState ,它会根据传递给它的参数而改变。 它看起来像这样:

class App extends React.Component {
  state = { choose: "Left" };

  setChoose = position => {
    this.setState({ choose: position });
  }
}

然后把它传下来:

<Top name="Left" onButtonClick={ this.setChoose } />

并通过单击处理程序从组件内部调用它:

class Top extends React.Component {
  render() {
    return (
      <div>
        <button className="Button" type="button" onClick={props.onButtonClick}>{this.state.name}</button>
      </div>
    );
  }
}

理想情况下,您会对正确的组件执行相同的操作。

使用钩子

几乎相同的事情,但您基本上可以免费使用, useState和获取 setter 方法:

function App(props) {
  const [choose, setChoose] = useState('Left');

  return (
    <Top name="Left" onButtonClick={ setChoose } />
  );
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM