【发布时间】:2022-07-26 15:36:01
【问题描述】:
在下面的代码中,url 发生了变化,但内容在手动刷新之前不会重新呈现。我在这里做错了什么?我可以使用 props.children 或其他东西,但我真的不想。我的理解是应该渲染嵌套元素下的内容。
const LandingPage = () => {
return (
<div>
<div>
buttons
<Button>
<Link to="/team1">team1</Link>
</Button>
<Button>
<Link to="/team2">team2</Link>
</Button>
<Button>
<Link to="/team3">team3</Link>
</Button>
</div>
<Outlet />
</div>
)
}
export default class Router extends Component<any> {
state = {
teams: [team1, team2, team3] as Team[]
}
public render() {
return (
<BrowserRouter>
<Routes>
<Route path='/' element={<LandingPage />} >
{
this.state.teams.map(team => {
const path = `/${team.name.toLowerCase()}`
return (
<Route path={path} element={
<BaseTeam
name={team.name}
TL={team.TL}
location={team.location}
members={team.members}
iconPath={team.iconPath}
/>
} />)
})
}
</Route>
</Routes>
</BrowserRouter>
)
}
}
【问题讨论】:
-
您确定在登录页面加载时在路由器状态下定义了团队吗?因此,当您浏览团队页面/链接时不是这样。
-
@CasperKuethe 当我点击第一个按钮时,它会正确加载,即 url 是 /team1 并且会显示 team1 的内容。但是之后点击按钮会更改 url 但不会更改内容
-
目前还不清楚这里有什么问题。您能否提供一个 running 代码和框演示来重现我们可以现场检查和调试的这个问题?但是,在映射的
Route组件上 缺少一个 React 键。 -
@DrewReese 创建沙盒的过程引导我修复它 --- 当我从 BaseTeam 组件中删除构造函数并正确呈现 this.props.name 时,问题得到解决。不知道为什么会这样。查看沙箱以查看非功能版本codesandbox.io/s/blue-silence-8svo9v?file=/src/baseteam.js
标签: reactjs react-router react-router-dom