cha*_*idt 78 react-bootstrap react-router
我在使用react-router和react-bootstrap时遇到了一些样式问题.下面是代码的片段
import { Route, RouteHandler, Link } from 'react-router';
import AuthService from '../services/AuthService'
import { Button, Nav, Navbar, NavDropdown, MenuItem, NavItem } from 'react-bootstrap';
<Nav pullRight>
<NavItem eventKey={1}>
<Link to="home">Home</Link>
</NavItem>
<NavItem eventKey={2}>
<Link to="book">Book Inv</Link>
</NavItem>
<NavDropdown eventKey={3} title="Authorization" id="basic-nav-dropdown">
<MenuItem eventKey="3.1">
<a href="" onClick={this.logout}>Logout</a>
</MenuItem>
</NavDropdown>
</Nav>
Run Code Online (Sandbox Code Playgroud)
这就是渲染时的样子.
我知道这<Link></Link>是造成这种情况但我不知道为什么?我希望这是在线.
小智 233
使用来自react-router-bootstrap的LinkContainer是可行的方法.以下代码应该有效.
import { Route, RouteHandler, Link } from 'react-router';
import AuthService from '../services/AuthService'
import { Button, Nav, Navbar, NavDropdown, MenuItem, NavItem } from 'react-bootstrap';
import { LinkContainer } from 'react-router-bootstrap';
/// In the render() method
<Nav pullRight>
<LinkContainer to="/home">
<NavItem eventKey={1}>Home</NavItem>
</LinkContainer>
<LinkContainer to="/book">
<NavItem eventKey={2}>Book Inv</NavItem>
</LinkContainer>
<NavDropdown eventKey={3} title="Authorization" id="basic-nav-dropdown">
<LinkContainer to="/logout">
<MenuItem eventKey={3.1}>Logout</MenuItem>
</LinkContainer>
</NavDropdown>
</Nav>
Run Code Online (Sandbox Code Playgroud)
在谷歌搜索这个问题时,这主要是对未来自我的一个注意事项.我希望其他人可以从答案中受益.
son*_*xqt 29
你尝试过使用react-bootstrap componentClass吗?
import { Link } from 'react-router';
// ...
<Nav pullRight>
<NavItem componentClass={Link} href="/" to="/">Home</NavItem>
<NavItem componentClass={Link} href="/book" to="/book">Book Inv</NavItem>
</Nav>
Run Code Online (Sandbox Code Playgroud)
Ale*_*xey 28
2019年更新:对于正在使用react-bootstrap v4(当前使用1.0.0-beta.5)和react-router-dom v4(4.3.1)的用户,只需使用Nav.Link的“ as”道具,即可使用例:
import { Link, NavLink } from 'react-router-dom'
import { Navbar, Nav } from 'react-bootstrap'
<Navbar>
{/* "Link" in brand component since just redirect is needed */}
<Navbar.Brand as={Link} to='/'>Brand link</Navbar.Brand>
<Nav>
{/* "NavLink" here since "active" class styling is needed */}
<Nav.Link as={NavLink} to='/' exact>Home</Nav.Link>
<Nav.Link as={NavLink} to='/another'>Another</Nav.Link>
<Nav.Link as={NavLink} to='/onemore'>One More</Nav.Link>
</Nav>
</Navbar>
Run Code Online (Sandbox Code Playgroud)
这是工作示例:https : //codesandbox.io/s/3qm35w97kq
小智 8
您可以避免使用LinkContainerreact-router-bootstrap。但是,componentClass它将as在下一版本中成为。因此,您可以将以下代码段用于最新版本(v1.0.0-beta):
<Nav>
<Nav.Link as={Link} to="/home" >
Home
</Nav.Link>
<Nav.Link as={Link} to="/book" >
Book Inv
</Nav.Link>
<NavDropdown title="Authorization" id="basic-nav-dropdown">
<NavDropdown.Item onClick={props.logout}>
Logout
</NavDropdown.Item>
</NavDropdown>
</Nav>
Run Code Online (Sandbox Code Playgroud)
你不应该把锚放在里面NavItem.通过执行此操作,您将在控制台中看到警告:
Warning: validateDOMNesting(...): <a> cannot appear as a descendant of <a>. See Header > NavItem > SafeAnchor > a > ... > Link > a.
那是因为什么时候NavItem渲染一个锚(直接的孩子NavItem)已经存在.
由于上面的警告,反应将被迫将两个锚视为兄弟,这导致了样式问题.
这是与react-router 4一起使用的解决方案:
import * as React from 'react';
import { MenuItem as OriginalMenuItem, NavItem as OriginalNavItem } from 'react-bootstrap';
export const MenuItem = ({ href, ...props }, { router }) => (
<OriginalMenuItem onClick={e => {e.preventDefault();router.transitionTo(href)}} href={href} {...props}/>
);
MenuItem.contextTypes = {
router: React.PropTypes.any
};
export const NavItem = ({ href, ...props }, { router }) => (
<OriginalNavItem onClick={e => {e.preventDefault();router.transitionTo(href)}} href={href} {...props}/>
);
NavItem.contextTypes = {
router: React.PropTypes.any
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
50835 次 |
| 最近记录: |