【发布时间】:2023-03-12 23:02:01
【问题描述】:
我正在使用 React Router 显示相同的组件,但在每条路由上使用不同的道具:
<BrowserRouter>
<div>
<Route exact path="/" render={() => LOGGED_IN ? <Redirect to="/profile" /> : <Login />} />
<Route path="/profile/:id" render={(props) => <App {...props} page="profile" pageLadder={['Home', 'Profile']} />}/>
<Route path="/team" render={() => <App page="team" pageLadder={['Home', 'Team']} />}/>
<Route path="/transactions" render={() => <App page="transactions" pageLadder={['Home', 'Transactions']} />}/>
<Route path="/tournaments" render={() => <App page="tournaments" pageLadder={['Home', 'Tournaments']} />}/>
<Route path="/tournament/:id" render={(props) => <App {...props} page="tournament" pageLadder={['Home', 'Tournament', props.match.params.id]} />}/>
<Route path="/match/:id" render={(props) => <App {...props} page="match" pageLadder={['Home', 'Match', props.match.params.id]} />} />
<Route path="/scrims" render={() => <App page="scrims" pageLadder={['Home', 'Scrims']} />} />
<Route path="/faq" render={() => <App page="faq" pageLadder={['Home', 'FAQ']} />} />
<Route path="/staff" render={() => <App page="staff" pageLadder={['Home', 'Staff']} />} />
<Route path="/privacy" render={() => <App page="privacy" pageLadder={['Home', 'Privacy Policy']} />} />
<Route path="/tos" render={() => <App page="tos" pageLadder={['Home', 'Terms of Service']} />} />
</div>
</BrowserRouter>
我还需要捕捉404错误,所以我添加了Switch和<Route component={NotFound} />:
<BrowserRouter>
<Switch>
<Route exact path="/" render={() => LOGGED_IN ? <Redirect to="/profile" /> : <Login />} />
... more routes
<Route component={NotFound} />
</Switch>
</BrowserRouter>
404 确实有效,但每个 <Link> 元素都停止工作 - 点击后,网址确实发生了变化,但组件保持不变,除非我刷新网站。
我尝试将代码更改为此进行测试:
<BrowserRouter>
<Switch>
<Route path="/team" component={Login} />
<Route path="/profile/" component={App} />
</Switch>
</BrowserRouter>
使用此代码,<Link> 组件可以按预期工作。
我可以做些什么来使我的第一个代码按预期工作?
【问题讨论】:
-
你使用
react-redux吗? -
@Sagivb.g 不,我没有。
-
根据您的描述,听起来问题出在
<App />组件中。听起来您有一些基于this.props.page的条件渲染逻辑?我的猜测是某些东西阻止了渲染,或者您没有正确更新它。你也可以发布你的<App/>组件的代码吗? -
那么你是在树的某个地方实现
shouldComponentUpdate吗? -
可能重复这个:stackoverflow.com/questions/44008510/… 你检查过这个吗?
标签: javascript reactjs react-router react-router-dom