首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当单击另一个组件中的按钮时,如何显示/隐藏组件?

当单击另一个组件中的按钮时,如何显示/隐藏组件?
EN

Stack Overflow用户
提问于 2020-08-18 19:14:57
回答 2查看 3K关注 0票数 1

我有以下反应成分:

代码语言:javascript
复制
export default class AdminHomePage extends Component {

  render() {
    return (
      <div>
        <NavBar />
        <OptionsMenu />
        <Form /> // needs to be inittially hidden 
        <ImportFile /> // needs to be inittially hidden 
        <Footer />
      </div>
    );
  }

}

在我的OptionsMenu组件中,我有两个按钮:

代码语言:javascript
复制
export default class OptionsMenu extends Component {

  render() {
    return (
      <div className="admin-menu">
        <div className="admin-menu-header">Select an option</div>
        <div className="buttons-admin-menu">

          <button className="button-admin">
            Register
          </button>

          <button className="button-admin" onClick={getFileModel}>
            Import CSV file
          </button>

        </div>
      </div>
    );
  }

}

最初,我需要同时隐藏FormImportFile组件,所以当我单击OptionsMenu文件中的"Import“按钮时,我会显示ImportFile组件,当我单击”注册“按钮时,会显示表单E 213组件。

我只找到了一些主题,这些主题显示了如何隐藏/显示在同一个文件/类中有各自按钮的组件,因此我不知道如何处理不同类上的按钮和组件。

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-18 19:22:48

您需要在父组件中创建一个记录状态(确定可见性的状态)的方法,并将该方法作为支柱传递:

代码语言:javascript
复制
export default class AdminHomePage extends Component {

constructor(props) {
   super(props);

   this.state = {
      isVisible: false
   }
   this.isElVisible = this.isElVisible.bind(this);
}

isElVisible() {
   this.setState({isVisible: !isVisible});
}

render() {
 return (
  <div>
    <NavBar />
    <OptionsMenu isViz={this.isElVisible} />
    <Form /> // needs to be inittially hidden 
    { this.state.isVisible? <ImportFile /> : '' } // needs to be inittially hidden 
    <Footer />
  </div>
  );
  }

}

然后,在您的props.isViz组件中调用OptionsMenu组件onClick或任何您希望它是可见的。

票数 2
EN

Stack Overflow用户

发布于 2020-08-18 20:36:56

我能够解决创建一个函数然后将该函数作为支柱发送给OptionsMenu组件的问题(类似于@silencedogood所说的,但他的回答有一些问题)。

组件AdminHomePage

代码语言:javascript
复制
export default class AdminHomePage extends Component {
  constructor(props) {
    super(props);
    this.handleFormClick = this.handleFormClick.bind(this);
    this.handleImportClick = this.handleImportClick.bind(this);
    this.state = {
      formVisible: false,
      importVisible: false,
    };
  }

  handleFormClick() {
    this.setState({
      formVisible: true,
      importVisible: false,
    });
  }

  handleImportClick() {
    this.setState({
      formVisible: false,
      importVisible: true,
    });
  }

  render() {
    return (
      <div>
        <NavBar
          keycloak={this.props.keycloak}
          name={this.props.name}
          email={this.props.email}
        />
        <OptionsMenu
          showForm={this.handleFormClick}
          showImport={this.handleImportClick}
        />
        {this.state.formVisible ? <Form /> : null}
        {this.state.importVisible ? <HomePage /> : null}
        <Footer />
      </div>
    );
  }
}

调用组件AdminHomePage中的函数

代码语言:javascript
复制
export default class OptionsMenu extends Component {
  render() {
    return (
      <div className="admin-menu">
        <div className="admin-menu-header">Selecione uma opção</div>
        <div className="buttons-admin-menu">
          <button
            className="button-admin"
            onClick={() => this.props.showForm()}
          >
            Register
          </button>
          <button
            className="button-admin"
            onClick={() => {
              this.props.showImport();
              getFileModelo();
            }}
          >
            Import CSV file
          </button>
        </div>
      </div>
    );
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63475253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档