보호된 경로 만들기: React-Router-dom을 사용하는 방법 가이드
P粉596191963
2023-08-24 11:22:28
<p><code>react-router-dom</code>을 사용하여 보호된 경로를 생성하고 응답을 localStorage에 저장하여 사용자가 다음에 열 때 세부정보를 다시 볼 수 있도록 하는 방법입니다. 로그인한 후에는 대시보드 페이지로 리디렉션되어야 합니다. </p>
<p>모든 기능은 ContextApi에 추가되었습니다.코드샌드박스链接:코드</p>
<p>我尝试过,但无法实现</p>
<p>路由页면</p>
<pre class="brush:php;toolbar:false;">import React, "react"에서 { useContext };
"./context"에서 { globalC }를 가져옵니다.
import { Route, Switch, BrowserRouter } from "react-router-dom";
"./About"에서 정보를 가져옵니다.
"./Dashboard"에서 대시보드를 가져옵니다.
"./Login"에서 로그인 가져오기;
"./PageNotFound"에서 PageNotFound를 가져옵니다.
함수 경로() {
const { authLogin } = useContext(globalC);
console.log("authLogin", authLogin);
반품 (
<브라우저라우터>
<스위치>
{인증로그인? (
<>
<경로 경로="/dashboard" 구성요소={대시보드} 정확 />
<경로 정확한 경로="/정보" 구성요소={정보} />
</>
) : (
<경로 경로="/" 구성요소={로그인} 정확 />
)}
<경로 구성요소={PageNotFound} />
</스위치>
</브라우저라우터>
);
}
기본 경로 내보내기;</pre>
<p>上下文页면</p>
<pre class="brush:php;toolbar:false;">"react"에서 React, { Component, createContext } 가져오기;
"axios"에서 axios를 가져옵니다.
내보내기 const globalC = createContext();
내보내기 클래스 Gprov는 구성요소 {를 확장합니다.
상태 = {
인증 로그인: null,
인증 로그인 오류: null
};
컴포넌트DidMount() {
var localData = JSON.parse(localStorage.getItem("loginDetail"));
if (로컬데이터) {
this.setState({
인증 로그인: localData
});
}
}
loginData = 비동기() => {
페이로드 = {
토큰: "ctz43XoULrgv_0p1pvq7tA",
데이터: {
이름: "nameFirst",
이메일: "인터넷이메일",
전화: "phoneHome",
_반복: 300
}
};
액시오스를 기다리다
.post(`https://app.fakejson.com/q`, 페이로드)
.then((res) => {
if (res.status === 200) {
this.setState({
인증 로그인: res.data
});
localStorage.setItem("loginDetail", JSON.stringify(res.data));
}
})
.catch((err) =>
this.setState({
인증로그인오류: 오류
})
);
};
렌더링() {
// console.log(localStorage.getItem("loginDetail"));
반품 (
<globalC.Provider
값={{
...이 상태,
로그인데이터: this.loginData
}}
>
{this.props.children}
</globalC.Provider>
);
}
}</pre>
<p><br /></p>
v6의 경우:
으아아아문서 링크: https://gist.github.com/mjackson/d54b40a094277b7afdd6b81f51a0393f
질문
으아아아Switch
除了Route
和Redirect
구성 요소 외부에서는 다른 렌더링이 처리되지 않습니다. 이와 같이 "중첩"하려면 각 구성 요소를 일반 경로로 래핑해야 하지만 이는 전혀 필요하지 않습니다.귀하의 로그인 구성 요소는 원래 방문한 "홈" 또는 개인 경로로의 리디렉션을 아직 처리하지 않습니다.
솔루션
react-router-dom
v6버전 6에서는 사용자 정의 라우팅 구성 요소가 더 이상 인기가 없으며 인증 레이아웃 구성 요소를 사용하는 것이 선호됩니다.
으아아아...
으아아아또는
으아아아...
으아아아react-router-dom
v5인증 컨텍스트를 사용하는
으아아아PrivateRoute
구성 요소를 만듭니다.원래 방문으로 다시 라우팅 리디렉션을 처리하려면
으아아아Login
구성요소를 업데이트하세요.모든 경로를 "플랫 목록"으로 렌더링
으아아아