【问题标题】:Creating a button in react that, when clicked, opens a webpage在反应中创建一个按钮,单击该按钮会打开一个网页
【发布时间】:2019-05-17 13:47:05
【问题描述】:

点击按钮什么都不做。

我尝试将<a href={news.url}> 传递到我用来生成按钮的函数中。目前,代码显示按钮上的链接,但我对如何使用提供的 Url 打开新选项卡感到困惑。我听过很多人在谈论路由器,但在我看来,为什么我必须将它用于这么简单的事情。像往常一样,我想太多这些事情。 数据是从另一个文件中的对象引入的。

import React from 'react';
import PropTypes from 'prop-types';
import './index.css';
import FileName from './filename';
import Subtitle from './subtitle';

const ListItem  = ({news}) => ( 

    <tr className="list-item">
        <td><FileName news={news} /> <a href={news.url}>{news.url}</a></td>
        <HandleClick openUrl={news.url} passLink={<a href={news.url}>{news.url}</a>}/>
        <span className="website"></span>
        <td><Subtitle news={news}/> </td>
    </tr>
)

 function HandleClick (props)  {
    return(
    <button onClick={props.passLink}>{props.openUrl} </button>
    )
}

export default ListItem

我希望该按钮在浏览器中打开一个新标签,该标签使用我随道具提供的链接。按钮什么都不做。

【问题讨论】:

    标签: reactjs


    【解决方案1】:

    对于按钮,您需要使用window.open 显式打开一个窗口。

    参考-Open button in new window?

    因此,您可以采用两种方法,而不是嵌入 &lt;a href={news.url}&gt;{news.url}&lt;/a&gt;,这只会呈现锚点但不会打开新窗口。

    1 使用window.open 打开窗口。

    function HandleClick (props)  {
      return (<button onClick={() => window.open(props.openUrl)}>{props.openUrl} </button>)
    }
    

    2 或者使用锚点,但将其设置为按钮。

    Bootstrap 和其他 CSS 框架可让您将锚定样式设置为按钮(btn btn-primary 等)。

    function HandleClick (props)  {
      return (<a href={props.openUrl} target="_blank" rel="noopener noreferrer">{props.openUrl}</a>)
    }
    

    重要提示 - 当您的目标设置为 _blank 时,出于安全原因,您应该添加 rel="noopener noreferrer"。 - 参考https://www.jitbit.com/alexblog/256-targetblank---the-most-underestimated-vulnerability-ever/

    【讨论】:

      【解决方案2】:

      要打开一个新窗口或标签,您可以在按钮的 onClick 处理程序中使用 window.open(...) 函数。

      const ListItem = ({ news }) => (
      
        <tr className="list-item">
          <td><FileName news={news} /> <a href={news.url}>{news.url}</a></td>
          <button onClick={() => {
            window.open(
              news.url,
              '_blank' // <- opens the link in a new tab or window.
            );
          }} >{news.url}</button>
          <span className="website"></span>
          <td><Subtitle news={news} /> </td>
        </tr>
      )
      

      【讨论】:

      • 有没有办法删除localhost:3000 以便实际加载链接?目前,上面的解决方案实际上确实按照我的要求做了,但它在链接之前保留了 localhost。
      • 您的意图是什么,从地址栏中删除 localhost:3000 或从您导航到的 uri 中删除它?请详细解释一下。
      猜你喜欢
      • 1970-01-01
      • 2015-10-16
      • 2017-12-09
      • 2013-04-07
      • 1970-01-01
      • 2021-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多