[react]HOC高次素子(ログインパス別)
導入背景
ログインの有無により,ルーティング権限を与えるために開発されたサービスはログインユーザのみが利用できるようになった.
HOC(Higher-Order-Component)?
HOCの利点:コードの再利用性
導入されたプロジェクトでは,HOCはauthを区別する部分に適用される.
import React, { useEffect } from 'react';
import { useSelector, useDispatch } from 'react-redux';
export default function (SpecificComponent, option) {
function AuthenticationCheck(props) {
let user = useSelector(state => state.user);
let isAuth = localStorage.getItem('token');
console.log(isAuth === null);
//Not Loggined in Status
if (isAuth === null) {
if (option) {
props.history.push('/login');
}
//Loggined in Status
} else {
if (option === false) {
props.history.push('/main');
}
}
return <SpecificComponent {...props} user={user} />;
}
return AuthenticationCheck;
}
localstorageの値がnull
の場合、ログインしていないと判断し、/login
ルーティングに移動します....
function App() {
return (
<Suspense fallback={<div>Loading...</div>}>
<div style={{ paddingTop: '0', minHeight: 'calc(98vh - 45px)' }}>
<NavBarPage />
<Switch>
<Route exact path="/" component={Auth(MainPage, true)} />
<Route exact path="/login" component={Auth(LoginPage, false)} />
<Route exact path="/register" component={Auth(RegisterPage, false)} />
<Route
exact
path="/register/taste"
component={Auth(RegisterTastePage, false)}
/>
...
App.jsに属するコードの一部.Auth()
ご希望のページをインポートします.true->ログインユーザーのみがアクセスできるページ
false->ログインしたプレイヤーがアカウントページに行くとブロックされます
Auth(MainPage,null)
に記入してください.Reference
この問題について([react]HOC高次素子(ログインパス別)), 我々は、より多くの情報をここで見つけました https://velog.io/@wjd489898/React-HOC-고차-컴포넌트テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol