我試圖遷移到使用React Router 4並且在理解<Switch>
組件的邏輯時遇到了一些麻煩,因爲它在docs中用於處理404(或不匹配的)路線。<Switch>組件在react-router-4中匹配null值
對於我的條目JavaScript文件,我設置了以下路線。
index.js
<Switch>
<Route path="/login" component={Login} />
<Route path="/forgot-password" component={ForgotPassword} />
<Route path="/email-verification" component={EmailVerification} />
<Route component={App} />
</Switch>
的Login
組件將檢查以查看是否用戶被驗證,並且如果是這樣,將用戶重定向到該/dashboard
路徑(經由history.replace
)。
App
組件僅在用戶通過身份驗證時纔可訪問,並且它具有類似的檢查以將用戶重定向到/login
(如果不是)。
在我App
組件我有更多的規定航線上,我可以肯定的是隻訪問,如果用戶登錄。
App.js
<Switch>
<Route path="/dashboard" component={Dashboard} />
<Route path="/accounts" component={Account} />
<Authorize permissions={['view-admin']}>
<Route path="/admin" component={Admin} />
</Authorize>
<Route path="/users" component={Users} />
<Route component={NotFound} />
</Switch>
就在這裏我的問題 。對通過權限的Authorize
組件會檢查用戶是否有這些權限,如果是這樣,它使孩子們直接,如果不是,則返回從render()
null
。
此處的預期行爲是,<Route path="/admin" />
在沒有足夠權限且<Route component={NotFound} />
組件呈現時根本不呈現。
按照docs:
呈現一個相匹配的第一個孩子。 A 沒有路徑總是匹配。
但是,如果我去任何航線宣告的<Authorize>
組件後,路由器匹配null
。這意味着,根據上面的例子,去/users
返回null。預期行爲是否會返回<Switch/>
組件中的第一個匹配項,即使它的值爲null
?
我該如何爲這種情況提供一個「全部通過」路由(404),而不需要爲App.js中的許多經過身份驗證的路由創建一個<PrivateRoute>
組件?一個null
值應該真的產生一個匹配?
我有同樣的問題。你有沒有找到這方面的解決方案? – Salim
我相信這個問題是由於我的組件造成的,但我從未發現這是爲什麼會出現這種情況。 –
Himmel