禁用navlink反应路由器

时间:2018-03-15 10:43:50

标签: reactjs react-router

我正在使用react路由器,我想在某种状态下禁用to属性。我传递了空字符串,但这并没有禁用链接而是占用了页面的基本路径。我甚至试图传递null但是这会破坏代码。甚至可以这样做吗?

<NavLink className="nav-link" to={this.state.role == 4 ? "/pages" : ""}></NavLink>

3 个答案:

答案 0 :(得分:9)

您可以尝试使用自定义点击处理程序禁用该按钮。

handleClick = (e) => {
    const { linkDisabled } = this.state
    if(linkDisabled) e.preventDefault()
}

render() {
    return (
        <NavLink 
            onClick={this.handleClick} 
            className="nav-link" 
            to="/pages"
        >
            ...
        </NavLink>
    )   
}

您可能希望在禁用按钮时添加一些css

或者你可以根本不显示按钮

{
    this.state.linkDisabled ? 
        null :
        <NavLink className="nav-link" to="/pages"></NavLink>
}

答案 1 :(得分:1)

{
    this.state.role !== 4 ? 
        <a href={false} className="nav-link"></a> :
        <NavLink className="nav-link" to="/pages"></NavLink>
}

答案 2 :(得分:1)

我用的和 Stretch0 一样,但我只是改成功能组件 只有我的确认被禁用 我的样式链接与 NavLink 相同:

导航栏 --> index.js

export default function NavBar() {
  const handleClick = (e) => {
  e.preventDefault()
}
  return (
    <Body>
      <Header>
        <Nav>
          <StyledLink exact activeClassName="current" to="/">
            <MenuLinks>CART</MenuLinks>
          </StyledLink>
          <StyledLink activeClassName="current" to="/payment">
            <MenuLinks>PAYMENT</MenuLinks>
          </StyledLink>
          <StyledLink activeClassName="current"  onClick={handleClick} to="/confirmation">
            <MenuLinks>CONFIRMATION</MenuLinks>
          </StyledLink>
        </Nav>
      </Header>
    </Body>
  )
}

NavBar ---> Styles.js

export const StyledLink = styled(NavLink)`
  text-decoration: none;
  color: #d6d6d6;
  display: flex;
  cursor: pointer;
  ${(props) => props.disabled && `
  cursor: default;`}
  &.${(props) => props.activeClassName} {
    color: #fe8d3b;
  }
  &:focus,
  &:hover,
  &:visited,
  &:link,
  &:active {
    text-decoration: none;
  }
`