首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单击按钮时更改组件

单击按钮时更改组件
EN

Stack Overflow用户
提问于 2021-09-26 22:11:05
回答 2查看 193关注 0票数 0

单击按钮后,我正在尝试更改组件。我在组件的类中定义了一个changeComp()函数,当单击按钮时,我想将它路由到皮夹连接组件,但它似乎不起作用。请帮帮我,我在这里错过了什么,或者为什么这个练习是错误的?

代码语言:javascript
复制
changeComp(){
return (
            <Router>
                <Switch>
                    <Route exact path="/wallet-connect" component={WalletConnect} />
                </Switch>
            </Router>
        );}

<button className="btn w-100 mt-3 mt-sm-4" onClick={(event) => this.changeComp(event)} type="submit">Sign In</button>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-26 22:56:15

您不能从事件处理程序返回JSX并期望它被呈现到DOM中。

在您的示例中,您需要将“/wallet”Route呈现到您的主路由器中,并在changeComp回调中调用一个命令式导航。

主路由器:

代码语言:javascript
复制
<Switch>
  ...
  <Route path="/wallet-connect" component={WalletConnect} />
  ...
</Switch>

在有按钮的组件中:

代码语言:javascript
复制
changeComp(event) {
  this.props.history.push("/wallet-connect");
}

<button
  className="btn w-100 mt-3 mt-sm-4"
  onClick={(event) => this.changeComp(event)}
  type="submit"
>
  Sign In
</button>

如果组件没有注入线路道具,那么您需要用withRouter高级组件来装饰它。

建议:

因为按钮是一个type="submit",如果它是在表单中呈现的,那么只需从表单的onSubmit处理程序发出命令导航即可。

代码语言:javascript
复制
submitHandler = event => {
  event.preventDefault();
  ...
  this.props.history.push("/wallet-connect");
}

...

<form onSubmit={this.submitHandler}>
  ...
  <button
    className="btn w-100 mt-3 mt-sm-4"
    type="submit"
  >
    Sign In
  </button>
</form>

如果按钮是而不是表单的部分,那么指定按钮类型为“按钮”,这样它就不会干扰任何表单元素。

代码语言:javascript
复制
<button
  className="btn w-100 mt-3 mt-sm-4"
  onClick={(event) => this.changeComp(event)}
  type="button"
>
  Sign In
</button>
票数 0
EN

Stack Overflow用户

发布于 2021-09-26 22:28:19

代码语言:javascript
复制
changeComp(){

const history = useHistory();

return (
            <Router>
                <Switch>
                    <Route exact path="/wallet-connect" component={WalletConnect} />
                </Switch>
            </Router>
<button className="btn w-100 mt-3 mt-sm-4" onClick={(event) => history.push("/wallet-connect")} type="button">Sign In</button>
        );}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69339350

复制
相关文章

相似问题

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