React-Router 를 사용 하여 전단 경로 감 권 의 예제 코드 를 실현 합 니 다.
React-Router
은 React 생태 에서 매우 중요 한 일환 이다.현재 React 의 단일 페이지 응용 경 로 는 대체적으로 전단 에서 스스로 관리 하 는 것 이지 예전 처럼 백 엔 드 경로 가 아니 라 React 관리 경로 의 라 이브 러 리 에서 자주 사용 하 는 것 이 바로React-Router
이다.본 고 는React-Router
의 사용 을 쓰 고 싶 지만 API 를 소개 하 는 것 만으로 도 너무 평범 하고공식 문서잘 썼 습 니 다.흔히 볼 수 있 는 개발 장면 으로React-Router
를 어떻게 사용 하 는 지 보 겠 습 니 다.일반적인 시스템 은 사용자 접근 권한 의 제한 이 있 습 니 다.일부 페이지 는 사용자 가 일정한 권한 을 가 져 야 접근 할 수 있 습 니 다.본 고 는React-Router
으로 전단 감 권 모델 을 실현 하 는 것 이다.본 논문 의 모든 코드 가 GitHub 에 올 라 왔 으 니 여러분 은 내 려 서 놀 수 있 습 니 다.https://github.com/dennis-jiang/Front-End-Knowledges/tree/master/Examples/React/react-router-usage
응용 예시
본 고 에서 실현 하고 자 하 는 기능 은 모두 가 자주 만 나 는 장면 이다.바로 서로 다른 사용자 역할 을 통제 하여 서로 다른 페이지 를 방문 하 는 것 이다.여 기 는 모두 네 개의 페이지 가 있다.
경로 감 권 을 실현 하려 면 한 걸음 한 걸음 더 해 야 합 니 다.우 리 는 먼저 React-Outer 로 이 몇 페이지 가 있 는 간단 한 프로젝트 를 구축 해 야 합 니 다.우 리 는 직접
create-react-app
으로 새 프로젝트 를 만 든 다음 에pages
폴 더 를 만 들 었 습 니 다.그 안에 우리 가 앞에서 말 한 몇 개의 페이지 를 넣 었 습 니 다.우리 페이지 는 먼저 간단하게 쓰 고 먼저 제목 을 쓰 자.예 를 들 어 다음 과 같다.
import React from 'react';
function Admin() {
return (
<h1> </h1>
);
}
다른 몇 페이지 도 비슷 하 다.그 다음 에 우 리 는
App.js
에 도입React-Router
을 경로 로 전환 할 수 있 습 니 다.브 라 우 저 에서 사용 하 는 것 은react-router-dom
입 니 다.새 버 전React-Router
은 핵심 논리 층 과 전시 층 을 분리 시 켰 습 니 다.핵심 논 리 는 경로 가 일치 하 는 등 전시 층 은 실제 점프 와 경로 변화 에 대한 감청 을 처리 합 니 다.이렇게 나 누 는 이 유 는...React-Router 는 브 라 우 저 뿐만 아니 라 React Native 도 지원 해 야 하기 때 문 입 니 다.이 두 플랫폼 의 감청 과 점프 는 다 르 기 때문에 현재React-Router아래 에 여러 개의 가방 이 있 습 니 다.react-router
:핵심 논리 처리,공용 기본 클래스 제공react-router-dom
:브 라 우 저 와 관련 된 경로 감청 과 점프 를 구체 적 으로 실현react-router-native
:RN 과 관련 된 경로 감청 과 점프 를 구체 적 으로 실현react-router
이 아니 라 직접 사용react-router-dom
하면 된다.왜냐하면 그것 은 스스로 인용react-router
하기 때문이다.다음은 프로젝트 에 도입 하 겠 습 니 다react-router-dom
.
import React from 'react';
import {
BrowserRouter as Router,
Switch,
Route,
} from "react-router-dom";
import Home from './pages/Home';
import Login from './pages/Login';
import Backend from './pages/Backend';
import Admin from './pages/Admin';
function App() {
return (
<Router>
<Switch>
<Route path="/login" component={Login}/>
<Route path="/backend" component={Backend}/>
<Route path="/admin" component={Admin}/>
<Route path="/" component={Home}/>
</Switch>
</Router>
);
}
export default App;
그리고Home
페이지 에Link
다른 페이지 로 이동 하 는 링크 를 추가 하면 점프 할 수 있 습 니 다.
import React from 'react';
import { Link } from 'react-router-dom';
function Home() {
return (
<>
<h1> </h1>
<ul>
<li><Link to="/login"> </Link></li>
<li><Link to="/backend"> </Link></li>
<li><Link to="/admin"> </Link></li>
</ul>
</>
);
}
export default Home;
지금까지 우리 의 응용 프로그램 이 실 행 된 것 은 다음 과 같다.모듈 구분
비록 우리 의 도약 이 실현 되 었 지만 모든 사람 이 모든 페이지 를 방문 할 수 있 습 니 다.우리 앞의 수 요 는 로그 인 한 캐릭터 에 따라 방문 하 는 페이지 를 제한 하 는 것 입 니 다.코드 를 쓰기 전에 우 리 는 어떻게 해 야 할 지 먼저 생각 합 니 다.물론 가장 직관 적 이 고 가장 간단 한 방법 은 모든 페이지 에서 현재 사용자 의 역할 을 검 측 하고 일치 하지 않 으 면 잘못 보고 하거나 첫 페이지 로 돌아 가 는 것 이다.우 리 는 지금 몇 페이지 밖 에 없 는데 이렇게 하 는 것 도 괜 찮 은 것 같 습 니 다.그러나 우리 의 응용 이 커지 고 페이지 가 많아 지면 모든 페이지 가 한 번 씩 검 사 를 하면 중복 되 기 때문에 우 리 는 각 도 를 바 꾸 어 이 문 제 를 생각해 야 합 니 다.
자세히 보면 우 리 는 모두 세 가지 역할 에 대해 세 가지 서로 다른 권한 에 대응 합 니 다.이 세 가지 권한 은 등급 관계 도 있 고 높 은 등급 의 권한 은 낮은 등급 의 권한 을 포함 하기 때문에 우리 의 페이지 도 이런 권한 에 따라 세 가지 로 나 눌 수 있 습 니 다.
routes
에 넣 을 수 있다.세 개의 파일 은 각각publicRoutes.js
,privateRoutes.js
,adminRoutes.js
이 라 고 명명 할 수 있다.모든 경로 파일 에 대해 우 리 는 이런 경 로 를 배열 로 구성 한 다음 에
export
밖 에 나 가서 호출 할 수 있다.예 를 들 어publicRoutes.js
:
import Login from '../pages';
import Home from '../pages/Home';
const publicRoutes = [
{
path: '/login',
component: Login,
exact: true,
},
{
path: '/',
component: Home,
exact: true,
},
];
export default publicRoutes;
그리고 우리 가 밖에서 사용 하 는 곳 은 바로 다음 과 같다.
import publicRoutes from './routes/publicRoutes';
function App() {
return (
<Router>
<Switch>
{publicRoutes.map(
({path, component, ...routes}) =>
<Route key={path} path={path} component={component} {...routes}/>
)}
<Route path="/backend" component={Backend}/>
<Route path="/admin" component={Admin}/>
</Switch>
</Router>
);
}
이렇게 하면 우리App.js
안 에는 지루 한 경로 목록 이 없 을 것 이 고 하나의 배열 만 순환 하면 된다.그러나 로그 인해 야 접근 할 수 있 는 페이지 와 관리자 페이지 에 대해 서 는 직접 렌 더 링Route
구성 요 소 를 할 수 없습니다.우 리 는 고급 구성 요 소 를 다시 밀봉 하고 감 권 의 작업 을 이 구성 요소 에 넣 는 것 이 좋 습 니 다.그러면 우리 의 일반적인 페이지 가 실 현 될 때 어떻게 감 권 하 는 지 신경 쓸 필요 가 없습니다.고급 구성 요소 패키지
이 인증 구성 요 소 를 패키지 하 는 것 도 간단 합 니 다.앞에서 우 리 는
publicRoutes
직접 순환 렌 더 링Route
구성 요 소 를 가 져 왔 습 니 다.우리 의 인증 구성 요 소 는 이 를 바탕 으로 논리 만 추가 하면 됩 니 다.진정한Route
구성 요 소 를 렌 더 링 하기 전에 현재 사용자 가 대응 하 는 권한 이 있 는 지 확인 하고 있 으 면 직접 렌 더 링Route
구성 요 소 를 검사 합 니 다.없 으 면 한 페이지 로 돌아 갈 수 있 습 니 다.로그 인 페이지 나 백 스테이지 홈 페이지 일 수 있 습 니 다.구체 적 으로 자신의 프로젝트 수요 에 따라.그래서 우리 의 루트 설정 파일privateRoutes.js
,adminRoutes.js
안의 루트 는publicRoutes.js
의 두 개의 인자 보다 많 습 니 다.
// privateRoutes.js
import Backend from '../pages/Backend';
const privateRoutes = [
{
path: '/backend',
component: Backend,
exact: true,
role: 'user', //
backUrl: '/login' //
},
];
export default privateRoutes;
adminRoutes.js
비슷 한 표기 법 입 니 다.
// adminRoutes.js
import Admin from '../pages/Admin';
const adminRoutes = [
{
path: '/admin',
component: Admin,
exact: true,
role: 'admin', // admin
backUrl: '/backend' //
},
];
export default adminRoutes;
그 다음 에 우리 의 고급 구성 요 소 를 쓸 수 있 습 니 다.우 리 는 이 를AuthRoute
라 고 명명 합 니 다.여기 서 가설 한 사용자 가 로그 인 할 때 백 엔 드 API 는 현재 사용자 의 역할 을 되 돌려 줍 니 다.한 사용자 가 여러 개의 역할 을 할 수 있 습 니 다.예 를 들 어 일반 사용자 의 역할 은['user']
이 고 관리자 의 역할 은['user', 'admin']
입 니 다.구체 적 인 권한 검증 논 리 는 자신의 프로젝트 권한 의 디자인 을 봐 야 합 니 다.여 기 는 하나의 예 일 뿐 입 니 다.
// AuthRoute.js
import React from 'react';
import { Route, Redirect } from 'react-router-dom';
function AuthRoute(props) {
const {
user: {
role: userRole
},
role: routeRole,
backUrl,
...otherProps
} = props;
// ,
if (userRole && userRole.indexOf(routeRole) > -1) {
return <Route {...otherProps} />
} else {
// ,
return <Redirect to={backUrl} />
}
}
export default AuthRoute;
그리고 우리AuthRoute
의 렌 더 링adminRoutes
과privateRoutes
으로:
// ... ...
{privateRoutes.map(
(route) => <AuthRoute key={route.path} {...route}/>
)}
{adminRoutes.map(
(route) => <AuthRoute key={route.path} {...route}/>
)}
로그 인 설정 권한우리
AuthRoute
에user: { role }
이라는 변 수 를 사 용 했 지만 우 리 는 아직 그것 을 설정 하지 않 았 다.실제 항목 에 서 는 로그 인 할 때 백 엔 드 API 가 현재 사용자 의 역할 을 되 돌려 주 고 전단 에 이 권한 정 보 를 일부 상태 관리 도구 에 저장 합 니 다.예 를 들 어Redux
.이 권한 을 모 의 하려 면Login
페이지 에 두 개의 단 추 를 쓰 십시오.사용자 의 설정 은 루트 구성 요소state
로 관 리 됩 니 다.Login
페이지 의 두 단 추 는 대응 하 는state
단 추 를 바 꿉 니 다.
import React from 'react';
import { Link } from 'react-router-dom';
function Login(props) {
const {loginAsUser, loginAsAdmin, history} = props;
const userLoginHandler = () => {
loginAsUser(); //
history.replace('/backend'); //
}
const adminLoginHandler = () => {
loginAsAdmin(); //
history.replace('/admin'); //
}
return (
<>
<h1> </h1>
<button onClick={userLoginHandler}> </button>
<br/><br/>
<button onClick={adminLoginHandler}> </button>
<br/><br/>
<Link to="/"> </Link>
</>
);
}
export default Login;
여기까지 우리 의 이 간단 한 길 은 감 권 이 완성 되 었 고 구체 적 으로 달 리 는 효 과 는 다음 과 같다.본 논문 의 모든 코드 가 GitHub 에 올 라 왔 으 니 여러분 은 내 려 서 놀 수 있 습 니 다.https://github.com/dennis-jiang/Front-End-Knowledges/tree/master/Examples/React/react-router-usage
총결산
React-Router
전단 의 경로 전환 을 관리 할 수 있 고React
생태 에서 매우 중요 한 창고 이다.React-Router
브 라 우 저 와React-Native
를 동시에 지원 하기 위해 세 개의 가방react-router
핵심 가방,react-router-dom
브 라 우 저 가방,react-router-native
지원React-Native
으로 나 누 었 다.사용 시 도입react-router
이 필요 없 이 필요 한 플랫폼 패키지 만 도입 하면 된다.React-Router
의 용법 으로 는 괜 찮 지만 우 리 는 사용 할 줄 만 알 고 그의 원 리 를 알 아야 한다.다음 글 은React-Router
의 소스 코드 에 어떤 비밀 이 담 겨 있 는 지 살 펴 보 겠 습 니 다.길 을 잃 지 않 고 관심 을 가 져 보 세 요.하하~참고 자료
공식 문서:https://reactrouter.com/web/guides/quick-start
GitHub 소스 주소:https://juejin.im/post/5e3ffc85518825494e2772fd
여기 서 React-Router 를 사용 하여 전단 로 감 권 을 실현 하 는 예제 코드 에 관 한 글 을 소개 합 니 다.더 많은 관련 React-Router 전단 로 감 권 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
바삭바삭하고 간단한 결제 페이지 만들기먼저 Next.js에서 프로젝트를 만듭니다. Vercel & Next.js가 매우 편하기 때문에 최근에는이 구성을 사용하고 있습니다. 그런 다음 Tailwind CSS를 넣습니다. Tailwind CSS를 사용하면 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.