Reactjs:在Button的`onClick`句柄上刷新页面?

Posted

技术标签:

【中文标题】Reactjs:在Button的`onClick`句柄上刷新页面?【英文标题】:Reactjs: page refreshing upon `onClick` handle of Button? 【发布时间】:2016-07-07 22:28:19 【问题描述】:

我的render() 中有以下块(这是一个引导按钮:https://react-bootstrap.github.io/components.html#buttons-options):

<Button type="simpleQuery" onClick=this.handleEntailmentRequest.bind(this)>
   Query
</Button>

还有以下功能:

handleEntailmentRequest() 
    console.log("handle request ");

当我点击按钮时,我可以看到控制台日志中出现“处理请求”问题,但突然消失了。我的理解是某些原因导致页面刷新。有什么意见我哪里出错了吗?

【问题讨论】:

我遇到的问题是试图变得聪明并使整个列表项可点击。因此,当我控制台记录我正在获取的数据时,它会为每个列表项呈现。唯一的解决方案是添加一个按钮来处理单击事件,现在它可以正常工作了。要么,要么让整个列表项成为一个按钮,呵呵。 【参考方案1】:

默认的按钮动作是提交表单。

如果您不需要 - 您需要防止:

handleEntailmentRequest(e) 
    e.preventDefault();

    console.log("handle request ");

参考资料:

MDN - Event.preventDefault()

【讨论】:

在 Reactjs(tsx 文件)中,我让它按照以下方式工作,handleEntailmentRequest(e:Event) .... 【参考方案2】:

页面重新加载问题的完整解决方案是:

<Button type="simpleQuery" onClick=(e) => this.handleEntailmentRequest(e)>
   Query
</Button>


handleEntailmentRequest(e)
    e.preventDefault();
    //do something...


【讨论】:

【参考方案3】:

您可以按照 zerkms 的建议阻止默认行为或

只需在按钮标签中添加 type="button" 即可。

例如:this.showSomething('all')>All

【讨论】:

【参考方案4】:

是的!那确实奏效了! 如果您的 react-app 被意外刷新,您应该将 (e) 作为事件参数传递,然后在函数体中使用 e.preventDefault(),这将防止 onClick 事件的默认行为发生。

【讨论】:

以上是关于Reactjs:在Button的`onClick`句柄上刷新页面?的主要内容,如果未能解决你的问题,请参考以下文章

Reactjs-onClick 事件在我第一次单击按钮时未触发

D2.Reactjs 操作事件状态改变路由

无法使 onClick 在 ReactJS 中工作

调用多个函数 onClick ReactJS

Reactjs:在onClick方法中传递参数而不会造成性能损失[重复]

如何在 reactjs 中使用 onclick 事件渲染子组件?