【问题标题】:How to add an external link to react-boostrap Navbar?如何将外部链接添加到 react-bootstrap Navbar?
【发布时间】:2016-12-10 09:46:50
【问题描述】:

这是我的简单导航栏。 Codepen here:

<Navbar inverse collapseOnSelect>
  <Navbar.Collapse>
    <Nav>
      <NavItem eventKey={1}>
        <a href="http://example.com/">
          Example
        </a>
      </NavItem>
    </Nav>
  </Navbar.Collapse>
</Navbar>

这会产生以下警告:

警告:validateDOMNesting(...): 不能作为 .请参阅应用 > NavItem > SafeAnchor > a > ... > a。

我了解警告来自NavItem 已经生成&lt;a&gt; 元素这一事实。

在寻找SafeAnchor + React的时候,我只能找到this seemingly unrelated NPM package

最简单的破解方法似乎是将&lt;a&gt; 替换为自定义点击处理&lt;span&gt;

openLink(href) {
  event.preventDefault();
  window.open(href);
}

...

<span onClick={this.openLink.bind(this, "http://example.com/"}>
  Sandbox
</span>

不确定是否有一个不那么复杂但不那么复杂的解决方案?

【问题讨论】:

  • 不熟悉 react-bootstrap 组件,但你不能只做&lt;NavItem eventKey={1} href={"http://codepen.io/Domiii/pen/JbvLbe"}&gt;Sandbox&lt;/NavItem&gt; 吗?
  • @DavidDomain Codepen 就在那里。欢迎您尝试,您会发现它不是那么可悲!我也认为它应该是好的和容易的,但到目前为止它已被证明是相当痛苦的......

标签: javascript html reactjs twitter-bootstrap-3 hyperlink


【解决方案1】:

您可以使用Navbar.LinkNavbar.Text 将文本和非导航链接添加到您的Navbar

Text and Non-nav links

松散的文本和链接可以包装在便利组件中:Navbar.Link 和 Navbar.Text

-- JSFiddle Example --

const { Accordion, Panel, Button, Modal, Form, FormGroup,
       FormControl, ControlLabel, Navbar, Nav, NavItem,
       NavDropdown, MenuItem, Jumbotron
      } = ReactBootstrap;

class App extends React.Component {  
  render() {
    return <Navbar inverse collapseOnSelect>
      <Navbar.Header>
        <Navbar.Brand>
          <a href="#">Brand</a>
        </Navbar.Brand>
        <Navbar.Toggle />
      </Navbar.Header>
      <Navbar.Collapse>
        <Nav>
          <NavItem eventKey={1} href="#">Link</NavItem>
        </Nav>
        <Navbar.Text>
          <Navbar.Link href="https://google.com" target="_blank">External Link</Navbar.Link>
        </Navbar.Text>
      </Navbar.Collapse>
    </Navbar>;
  }
}

ReactDOM.render(
  <App/>,
  document.getElementById('app')
);

【讨论】:

  • 谢谢,这行得通!我已经试过了,结果你可以在&lt;Navbar.Text&gt; 元素之前和之后有多个Navs,这很好。但是,是否存在与此相关的潜在陷阱?尤其是没有添加到Nav,让我有点紧张。
  • 不要认为有任何陷阱,但是查看生成的 HTML 我注意到该元素原来是 p 标记为 Navbar.TextaNavbar.Link,这完全有道理。由于NavItem 将导致li 标记带有a 作为孩子,因此您不能将Navbar.Link 直接添加到Nav 组件。你最终会在ul 中得到一个a。所以我想它是为了在Navbar.Link 组件周围组合你的Nav 组件,但是你喜欢。添加NavBar.Text 作为父级将确保填充是正确的。希望能帮助到你。 ;)
  • 好东西!已经接受了答案:) - 我现在认为 &lt;Nav&gt; 的名字很糟糕...... IMO 它还不足以证明名称的普遍性,因为您可以完全创建 NavBars 而无需使用 @987654346 @!像Navbar.ItemList 这样的东西似乎更合适:P
猜你喜欢
  • 1970-01-01
  • 2013-09-21
  • 2011-08-18
  • 1970-01-01
  • 1970-01-01
  • 2017-06-11
  • 2012-08-16
  • 2021-02-04
  • 1970-01-01
相关资源
最近更新 更多