路由頁面
<pre class="brush:php;toolbar:false;">從「react」匯入 React, { useContext }; 從“./context”導入{globalC}; 從「react-router-dom」匯入{路由、交換器、BrowserRouter}; 從“./About”導入關於; 從“./Dashboard”導入儀表板; 從“./Login”匯入登入名; 從“./PageNotFound”導入PageNotFound; 函數路線(){ const { authLogin } = useContext(globalC); console.log("authLogin", authLogin); 返回 ( <瀏覽器路由器> <開關> {驗證登入? ( <> <路線路徑=“/儀表板”組件= {儀表板}精確/> /> <路線確切路徑=“/關於”元件= {關於} /> </> ) : ( <路由路徑=“/”元件={登入}精確/>> )} <路由元件={PageNotFound} /> </切換> </瀏覽器路由器> ); } 導出預設路由;</pre>上下文頁面
從「react」匯入 React, { Component, createContext }; 從“axios”導入 axios; 匯出 const globalC = createContext(); 導出類別 Gprov 擴充組件 { 狀態={ 授權登入:空, authLogin錯誤:空 }; 組件DidMount() { var localData = JSON.parse(localStorage.getItem("loginDetail")); 如果(本地資料){ this.setState({ authLogin:本地數據 }); } } 登入資料 = async() => { 讓有效負載= { 令牌:“ctz43XoULrgv_0p1pvq7tA”, 數據: { 名稱:“名字第一”, 電子郵件:“互聯網電子郵件”, 電話:“電話主頁”, _重複:300 } }; 等待 axios .post(`https://app.fakejson.com/q`,有效負載) .then((res) => { if (res.status === 200) { this.setState({ authLogin:res.data }); localStorage.setItem("loginDetail", JSON.stringify(res.data)); } }) .catch((錯誤) => this.setState({ 授權登入錯誤:錯誤 }) ); }; 使成為() { // console.log(localStorage.getItem("loginDetail")); 返回 ({this.props.children} ); } }</前> <p><br />></p>
對於v6:
文件連結: https://gist.github.com/mjackson/d54b40a094277b7afdd6b81f51a0393f
問題
Switch
除了Route
和Redirect
元件之外,不會處理其他任何渲染。如果您想要像這樣“嵌套”,那麼您需要將每個元件包裝在通用路由中,但這是完全不必要的。您的登入元件尚未處理重定向回原來存取的「首頁」或私人路由。
解決方案
react-router-dom
v6在版本6中,自訂路由元件已經不再受歡迎,首選方法是使用auth佈局元件。
...
或
...
react-router-dom
v5建立一個消費您的auth上下文的
PrivateRoute
元件。更新您的
Login
元件以處理重定向回原來存取的路由。將所有路由渲染為「扁平清單」