So verwenden Sie react-router-dom
, um eine geschützte Route zu erstellen und die Antwort in localStorage zu speichern, damit der Benutzer seine Details beim nächsten Öffnen erneut anzeigen kann. Nach der Anmeldung sollten sie zur Dashboard-Seite weitergeleitet werden.
Alle Funktionen werden in ContextApi hinzugefügt.
Codesandbox-Link: Code
Ich habe es versucht, konnte es aber nicht zum Laufen bringen.
路由页面
import React, { useContext } from "react"; import { globalC } from "./context"; import { Route, Switch, BrowserRouter } aus „react-router-dom“; import About from „./About“; Dashboard aus „./Dashboard“ importieren; Login importieren von „./Login“; importiere PageNotFound aus „./PageNotFound“; Funktion Routes() { const { authLogin } = useContext(globalC); console.log("authLogin", authLogin); zurückkehren (); } Standardrouten exportieren; {authLogin ? ( <> > ) : ( )}
上下文页面
import React, { Component, createContext } from "react"; Axios aus „axios“ importieren; export const globalC = createContext(); Die Exportklasse Gprov erweitert Component { Zustand = { authLogin: null, authLoginerror: null }; ComponentDidMount() { var localData = JSON.parse(localStorage.getItem("loginDetail")); if (localData) { this.setState({ authLogin: localData }); } } loginData = async () => { let payload = { Token: „ctz43XoULrgv_0p1pvq7tA“, Daten: { Name: „nameFirst“, E-Mail: „internetEmail“, Telefon: „phoneHome“, _Wiederholung: 300 } }; warte auf Axios .post(`https://app.fakejson.com/q`, Nutzlast) .then((res) => { if (res.status === 200) { this.setState({ authLogin: res.data }); localStorage.setItem("loginDetail", JSON.stringify(res.data)); } }) .catch((err) => this.setState({ authLoginerror: Fehler }) ); }; render() { // console.log(localStorage.getItem("loginDetail")); zurückkehren ({this.props.children} ); } }
对于v6:
链接到文档:https://gist.github.com/mjackson/d54b40a094277b7afdd6b81f51a0393f
问题
Switch
除了Route
和Redirect
组件之外,不处理任何其他渲染。如果您想要像这样“嵌套”,那么您需要将每个组件包装在通用路由中,但这是完全不必要的。您的登录组件也没有处理重定向回原始访问的“主页”或私有路由。
解决方案
react-router-dom
v6在版本6中,自定义路由组件已经不再受欢迎,首选方法是使用auth布局组件。
...
或者
...
react-router-dom
v5创建一个消费您的auth上下文的
PrivateRoute
组件。更新您的
Login
组件以处理重定向回原始访问的路由。将所有路由呈现为“平面列表”