javascript - 为什么 <Route component={Menu}/> 而不是 <Menu/>?

标签 javascript reactjs react-router

我的/About 中有一个包含路线的子菜单。
这个子菜单称为 AboutMenu 并出现在/About 下的所有页面,例如 =>/About/Company 和/About/Info。

练习示例显示 <Route component={AboutMenu} />activeStyle={match.isExact && selectedStyle}>我刚用过<AboutMenu />并添加了 exact改为我的 AboutMenu 链接。

为什么要使用 <Route component={AboutMenu} />而不是仅仅渲染 <AboutMenu />

export const AboutMenu = (props) => {

    return (
        <div>
            <li>
                <NavLink exact to='/About' activeStyle={ activeStyle}> Company </NavLink>
            </li>
            <li>
                <NavLink to='/About/History' activeStyle={activeStyle}> History </NavLink>
            </li>
            <li>
                <NavLink to='/About/Vision' activeStyle={activeStyle}> Vision </NavLink>
            </li>
        </div>
    )
}

关于部分

const About = (props) => {

    return(
        <Template>
            <AboutMenu />
            {/* OR <Route component={AboutMenu} /> ?*/}
            <Route exact path='/About' component={Company} />
            <Route path='/About/History' component={History} />
            <Route path='/About/Vision' component={Vision} />
        </Template>
    )
}

export default About

最佳答案

<Route>没有 path将永远匹配。所以,两者

<AboutMenu />

<Route component={AboutMenu} />

将导致 AboutMenu组件始终呈现。也就是说,在这种特殊情况下,您可以互换使用它们中的任何一个。

但是,在 <Switch> 的情况下, 两者之间存在差异组件被使用。看这个例子:

  <Switch>
    <Route path="/" exact component={Home}/>
    <Route path="/will-match" component={WillMatch}/>
    <Route component={NoMatch}/>
  </Switch>

这里,

<Route component={NoMatch}/>

排在最后,如果之前没有匹配的路由,它只会匹配,就像default case一样。传统的switch许多编程语言中的语句。如果上面的两条路线之一匹配,它将不匹配,随后是 NoMatch组件不会被渲染。相反,如果最后一条路线只是

<NoMatch />

NoMatch组件将总是被渲染。

关于javascript - 为什么 <Route component={Menu}/> 而不是 <Menu/>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44468699/

相关文章:

javascript - Next.js getInitialProps - 动态路由在生产中不起作用

php - 尽管发生了变化,javascript 文件仍被缓存

javascript - 是否可以在validationSchema通过后进行更多的验证,是的,通过了吗?

javascript - 解析错误 : Line 9: Unexpected identifier in react

javascript - 单击提交按钮,执行函数然后提交表单react.js

javascript - 定位绝对 div 并在 div 外部切换

node.js - ERR_NAME_NOT_RESOLVED 使用 Docker 网络在后端容器和 React 容器之间进行通信

javascript - axios获取多个JSON端点并保存到状态(react)

javascript - 如果尚未存储在服务器中,如何从服务器获取数据

javascript - React Router 不匹配嵌套路由