Cara menggunakan react-router-dom
Buat laluan yang dilindungi dan simpan respons dalam localStorage supaya pengguna boleh melihat butirannya semula apabila mereka membukanya lagi. Selepas log masuk, anda harus dialihkan ke halaman papan pemuka.
Semua fungsi ditambah dalam ContextApi.
Pautan kotak kod: Kod
Saya dah cuba tapi tak berjaya.
Halaman penghalaan
import React, { useContext } from "react"; import { globalC } from "./context"; import { Route, Switch, BrowserRouter } from "react-router-dom"; import About from "./About"; import Dashboard from "./Dashboard"; import Login from "./Login"; import PageNotFound from "./PageNotFound"; function Routes() { const { authLogin } = useContext(globalC); console.log("authLogin", authLogin); return ( <BrowserRouter> <Switch> {authLogin ? ( <> <Route path="/dashboard" component={Dashboard} exact /> <Route exact path="/About" component={About} /> </> ) : ( <Route path="/" component={Login} exact /> )} <Route component={PageNotFound} /> </Switch> </BrowserRouter> ); } export default Routes;
Halaman konteks
import React, { Component, createContext } from "react"; import axios from "axios"; export const globalC = createContext(); export class Gprov extends Component { state = { 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", data: { name: "nameFirst", email: "internetEmail", phone: "phoneHome", _repeat: 300 } }; await axios .post(`https://app.fakejson.com/q`, payload) .then((res) => { if (res.status === 200) { this.setState({ authLogin: res.data }); localStorage.setItem("loginDetail", JSON.stringify(res.data)); } }) .catch((err) => this.setState({ authLoginerror: err }) ); }; render() { // console.log(localStorage.getItem("loginDetail")); return ( <globalC.Provider value={{ ...this.state, loginData: this.loginData }} > {this.props.children} </globalC.Provider> ); } }
Untuk v6:
Pautan ke dokumentasi: https://gist.github.com/mjackson/d54b40a094277b7afdd6b81f51a0393f
Soalan
Switch
不处理除Route
和Redirect
Sebarang rendering di luar komponen. Jika anda ingin "bersarang" seperti ini, maka anda perlu membungkus setiap komponen dalam laluan yang sama, tetapi ini sama sekali tidak perlu.Komponen log masuk anda juga tidak mengendalikan ubah hala kembali ke "rumah" asal atau laluan peribadi yang dilawati.
Penyelesaian
react-router-dom
v6Dalam versi 6, komponen penghalaan tersuai tidak lagi popular, kaedah yang disyorkan ialah menggunakan komponen susun atur pengesahan.
...
atau
...
react-router-dom
v5Buat komponen
PrivateRoute
yang menggunakan konteks pengesahan anda.Kemas kini komponen
Login
anda untuk mengendalikan ubah hala laluan kembali ke lawatan asal.Render semua laluan dalam "senarai rata"