我试图在BulletinBoard.js
创建一个独立的路由(不确定这是否是正确的术语),在那里我可以使用Link
去Create Bulletin
组件。我还试图在BulletinList.js
创建另一个独立的路由,在那里我可以用它们各自的id导航到Edit Bulletin
。
在此之前,我尝试使用useRouteMatch与路径和url,但显然这不是正确的方式来做到这一点,现在我被告知使用useLocation,它确实添加了/createbulletin
和/editbulletin/id
路径后面的当前url,但它不导航到组件本身。
在过去的两天里,我一直在绞尽脑汁,但我仍然没有想出正确的方法来做这件事。
这是我创建的代码盒供参考。
你的代码在url改变后没有导航到另一个组件的原因是你在声明路由时没有使用exact
属性。所以它匹配/bulletinboard/anything
,然后它总是渲染BulletinBoard
组件。
您可以在App.js
文件中定义所有路由,如
<Switch>
<Route path="/" component={Home} exact />
<Route path="/bulletinboard" component={BulletinBoard} exact />
<Route path="/bulletinboard/edit/:id" component={EditBulletinBoard} exact />
<Route path="/infohub" component={InfoHub} exact />
<Route component={NotFound} />
</Switch>
还有,查看useHistory钩子
所以在BulletinBoard.js
当用户点击链接
onClick={() => history.push(`/bulletinboard/edit/${id}`)}
请注意,编辑路由会呈现一个codesandbox还没有的不同组件