如何在react-router dom(v4) 中使路径参数成为可选参数?

IT技术 reactjs react-router react-router-v4
2021-05-18 04:07:18

这是我认为不正确和多余的代码:

<BrowserRouter>
 <Route exact={true} path="/" component={App}/>
 <Route path="/:filter" component={App}/>
</BrowserRouter>

我认为 exact={true} 是多余的,因为我可以在以前的 react 路由器版本中简单地执行 path="/(:filter)" ?我不想使用 history.push :(

这就是我在页脚组件中使用 NavLink 的方式:

const Footer = () => (
  <p>
    Show:
    {" "}
    <FilterLink filter="all"> 
      All 
    </FilterLink>
    {", "}
    <FilterLink filter="active">
      Active
    </FilterLink>
    {", "}
    <FilterLink filter="completed">
      Completed
    </FilterLink>
  </p>
);

和我的 FilterLink:

const FilterLink = ({ filter, children }) => (
  <NavLink 
    to={ filter === 'all' ? '' : filter }
    activeStyle={{
      textDecoration: 'none',
      color: 'red'
    }}
  >
  {children}
  </NavLink>
);

路径在变,例如:localhost:3000/active 但是样式没有影响,但是影响all? 当我在 localhost:3000/?

1个回答

在 react-router v4 中,您可以定义一个可选的路径参数,例如

<BrowserRouter>
 <Route path="/:filter?" component={App}/>
</BrowserRouter>

路径参数必须按照react-router文档中提到的 npm 包path-to-regexp理解的方式定义