我正在使用反應路由器onEnter
屬性來處理驗證,如下所示,也如"auth-flow" example中所示。可能用`onEnter`延遲組件渲染?
function requireAuth(nextState, replace, next) {
Auth.validateToken()
.then(() => {
next();
})
.fail(() => {
replace('/login');
next();
});
}
<Router history={history}>
<Route path="/" component={App} >
<IndexRoute
component={Dashboard}
onEnter={requireAuth}
/>
<Route
path="login"
component={LogInForm}
/>
</Route>
</Router>
我使用的onEnter
異步回調功能,因爲我的令牌驗證需要一個服務器調用。
我遇到的問題是此示例中的Dashboard
組件在調用next()
之前呈現/掛載。理想情況下,渲染將等待直到回調被觸發。
我誤解了這是如何工作的?有沒有辦法延遲渲染路由組件,直到某些條件成立?
這些真的是很棒的想法,謝謝!不過,它感覺這應該更多地以「重定向」的方式處理。你不認爲未經授權的用戶的瀏覽器應該被重定向到'/ login'之類的東西嗎? –
我不知道。網址意味着成爲互聯網上資源的穩定單位(網絡或其他),奇蹟般地改變某人認爲他們正在遵循的鏈接,並期望*和*會惹惱您的用戶。相反,呈現他們想要的頁面,但去「你沒有登錄。這是登錄表單。在這裏,沒有必要點擊任何其他地方,只需填寫這個,點擊登錄,甚至無需重新加載頁面,你將獲得你正在尋找的內容「。是的,你應該有一個專門的'/ login'路由,用戶可以明確地調用,但是你不需要重定向到它。它是反應。 –
詳細說明「它是React」:您的登錄頁面應該合理地使用模塊化組件來處理登錄 - 當用戶尚未獲得授權時,也可以在其他頁面上使用該組件。登錄組件可以容納所有授權碼,您可以使用'onAuthorized = {authorized => this.setState {{authorized})}'屬性來引導它,以確保它自動爲加載的任何頁面執行正確的操作它進入它的用戶界面。 –