1 回答

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超8個(gè)贊
我 99% 確定您的問(wèn)題是因?yàn)槟褂昧顺^(guò) 1 個(gè)路由器。刪除UIBrowserRouter周?chē)膬?nèi)容Settings。我猜測(cè)當(dāng)嵌套路由沒(méi)有通過(guò)外部路由器的鏈接導(dǎo)航到時(shí),該match道具不會(huì)像您期望的那樣初始化。
const Settings = (props) => {
let { path, url } = useRouteMatch();
return (
<div className="Settings">
<nav>Navigation bar</nav>
<div className="SettingsWrapper">
<Switch>
<Route path={`${path}/editprofile`} component={EditProfile} />
<Route
path={`${path}/changepassword`}
component={ChangePassword}
/>
<Route path={`${path}/changepin`} component={ChangePin} />
<Route
path={`${path}/accountsettings`}
component={BankSettings}
/>
</Switch>
</div>
</div>
);
};
編輯
好吧,當(dāng)刪除嵌套路由器并創(chuàng)建我自己的代碼和盒子時(shí),我發(fā)現(xiàn)了嵌套路由的一個(gè)小、微妙但重要的“怪癖”。任何渲染更多路由的嵌套路由都不能指定exact路由上的 prop。
const App = () => {
let { path, url } = useRouteMatch();
return (
<div className="App">
<nav>Navigation bar</nav>
{/* setting up the routes */}
<div className="MainBody">
<Switch>
...
<Route
path={`${path}/settings`}
exact // <-- exact match precludes sub-routes!!
component={Settings}
/>
</Switch>
</div>
</div>
);
};
因此,如果路徑是“/dashboard/settings/editprofile”,則路徑不再與路由路徑完全匹配,并且不會(huì)呈現(xiàn)路由。
解決方案
exact只需省略嵌套路由渲染子路由的 prop即可。請(qǐng)記住,路由路徑將被視為“前綴”,因此如果沒(méi)有exact指定 prop,路徑“/dashboard/settings/editprofile”可以與“/dashboard/settings”匹配。
const Dashboard = () => {
let { path, url } = useRouteMatch();
return (
<div className="App">
<nav>Dashboard Navigation bar </nav>
<NavLink to={`${url}/settings`}>Settings</NavLink>
{/* setting up the routes */}
<div className="MainBody">
<Switch>
...
<Route path={`${path}/settings`} component={Settings} /> // <-- no exact match
</Switch>
</div>
</div>
);
};
添加回答
舉報(bào)