微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ReactJs:如何不使用Routes返回上一页?

如何解决ReactJs:如何不使用Routes返回上一页?

我有一个包含3个选项的菜单

enter image description here

每个按钮由一个不同的React组件表示,因此我在 AdminHomeView 中有3个React组件:

export default class AdminHomeView extends Component {
  constructor(props) {
    super(props);
    this.handlePartnerAreaClick = this.handlePartnerAreaClick.bind(this);
    this.handleCampaignAreaClick = this.handleCampaignAreaClick.bind(this);
    this.handleImportAreaClick = this.handleImportAreaClick.bind(this);
    this.state = {
      partnerAreaVisible: false,campaignAreaVisible: false,importAreaVisible: false,};
  }

  handlePartnerAreaClick() {
    this.setState({
      partnerAreaVisible: true,});
  }

  handleCampaignAreaClick() {
    this.setState({
      partnerAreaVisible: false,campaignAreaVisible: true,});
  }

  handleImportAreaClick() {
    this.setState({
      partnerAreaVisible: false,importAreaVisible: true,});
  }

  render() {
    return (
      <div>
        <OptionsMenu
          showPartnerArea={this.handlePartnerAreaClick}
          showCampaignArea={this.handleCampaignAreaClick}
          showImportArea={this.handleImportAreaClick}
        />
        {this.state.partnerAreaVisible ? <PartnersView /> : null}
        {this.state.campaignAreaVisible ? <CampaignsView /> : null}
        {this.state.importAreaVisible ? <ImportView /> : null}
      </div>
    );
  }
}

当我单击“ Partners”按钮时,React呈现 PartnersView 组件,这是页面的外观: (有一个以前创建的所有合作伙伴的列表,由 ListPartners 组件表示,还有一个按钮,显示用于注册新合作伙伴的表单。)

enter image description here

这是 PartnersView 组件的代码

export default class PartnersView extends Component {
  constructor(props) {
    super(props);

    this.handleCreatePartnerClick = this.handleCreatePartnerClick.bind(this);

    this.state = {
      listPartnersVisible: true,formPartnerVisible: false,partners: [],};
  }

  componentDidMount() { ... }

  handleCreatePartnerClick() {
    this.setState({
      listPartnersVisible: false,formPartnerVisible: true,});
  }

  render() {
    return (
      {this.state.listPartnersVisible ? (
        <div id="list-container">
          <ListPartners partners={this.state.partners} />

          <div className="button-wrapper">
            <button onClick={this.handleCreatePartnerClick} >
              Register new partner
            </button>
          </div>
       </div>
      ) : null}

      {this.state.formPartnerVisible ? (
        <FormPartner />
      ) : null}
    );
  }
}

最后,当我单击“注册新伙伴”按钮时,页面如下所示:

enter image description here

但是,当我再次单击TOP菜单上的“合作伙伴”按钮时,我需要返回合作伙伴列表,但是现在,当我单击此按钮时什么也没有发生(因为React可以理解用户仍然在PartnerArea中(第一个代码

有人知道我可以回到合作伙伴列表吗?

谢谢。

解决方法

我建议使用Fully Uncontrolled Component with a Key模式。

为了在移动到另一个项目时重置值...,我们可以使用特殊的React属性 称为key。当key发生变化时,React将create a new component instance rather than update the current one

您可以在PartnersView的{​​{1}}组件上使用React键来重置组件。

由于您只想重置视图,因此密钥不需要特殊,我怀疑将其设为随机数就足够了(只需与最后一个密钥不同)

AdminHomeView

但是,如果您对此感到担忧,则可以始终使用uuid之类的东西来生成真正唯一的密钥。

<PartnersView key={Math.random()} />

在代码中

import { v4 as uuidv4 } from 'uuid';

...

<PartnersView key={uuidv4()} />

Edit reactjs-how-to-go-back-to-a-previous-page-not-using-routes

,

现在您是formpartner。添加formpartner之后,如果将标志“ formPartnerVisible”更改为false,并将listPartnersVisible更改为true。它将解决问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。