【问题标题】:React route does not getting displayed without click没有点击就不会显示反应路线
【发布时间】:2019-06-09 08:01:42
【问题描述】:

我想使用 react 路由器来导航我的应用程序。它是一个电子桌面应用程序,所以我的调试是有限的。当登录(在没有路由器的情况下运行)时,会显示带有路由器的组件,但是当显示此组件时,它不会显示确切的路由“/”。只有当我单击“链接”组件时,它才会显示。我正在使用BrowserRouter 组件。有人有想法吗?

这就是父组件的渲染方法:

render() {
    return (
        <Router>
            <div style={styles.text}>
                <AppBar title={this.state.title}/>
                <Grid container className='mainGrid'>
                    <Grid item>
                        <Route exact path="/" component={Feed} />
                    </Grid>
                </Grid>
                <BottomNav/>
                <Sidenav/>
            </div>
        </Router>
    );
}

这就是BottomNav的渲染方法:

render() {
    const {value} = this.state;
    return (
        <BottomNavigation className='BottomNav' showLabels value={value}
                          onChange={this.handleChange}>
            <BottomNavigationAction component={Link} to="/" label="Feed" icon={<BookIcon/>}/>
            <BottomNavigationAction component={Link} to="/calendar" label="Calendar" icon={<CalendarIcon/>}/>
            <BottomNavigationAction component={Link} to="/mail" label="Mail" icon={<MailIcon/>}/>
            <BottomNavigationAction component={Link} to="/tickets" label="Tickets" icon={<AssignmentIcon/>}/>
        </BottomNavigation>)
}

这就是 Feed 组件的渲染方法:

render(){
    return(
        <h1>Hallo Welt (Feed)</h1>
    )
}

如果您需要更多信息,请写评论。

【问题讨论】:

  • 您正在使用哪个路由器组件,例如BrowserRouter, HashRouter, ...?
  • 哦,对不起,我用的是BrowserRouter。我会编辑它
  • 当我把 放在前面时,它可以工作,但我认为这不是一个好的解决方案
  • 您确定登录重定向到“/”路由吗?因为你的路线是准确的,所以只有准确的“/”会匹配
  • 不,登录不会重定向到“/”路由。如果成功,它只会从路由器渲染父组件。

标签: javascript reactjs react-router material-ui


【解决方案1】:

您缺少周围的 Switch 组件,该组件会呈现自动匹配的第一个 Route。

<Switch>
  <Route exact path="/" component={Feed} />
</Switch>

编辑

您所在位置的初始路线似乎是一个空字符串,而不是/。我从来没有遇到过这种行为,所以它可能与服务器有关?

我可以想到这两种解决方案:

添加重定向

在您的 App.jsx 中添加 &lt;Redirect from="" to="/" /&gt;。这将在您的路径中强制使用正斜杠。

禁用路由严格模式

React 路由器添加了一个 exact 属性来解决尾部斜杠的问题。虽然,我不能 100% 确定这在您的示例中是否有效。

&lt;Route exact path="/" component={Feed} exact={false} /&gt;

【讨论】:

  • 好的,如果我删除 exact 关键字,它会呈现路线,但适用于所有路线。 :D
  • 你能用 JSFiddle jsfiddle.net/reactjs/69z2wepo 添加一个工作示例吗?
  • 有点复杂,有12个文件,有组件和Material-UI
  • 嗯,初始路径可能是一个空字符串。如果您添加第二条带有空字符串作为路径的路由会发生什么?
  • 是的,绝对有可能。但是我该如何路由呢
猜你喜欢
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 2020-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-10
相关资源
最近更新 更多