ルーティングと不活性ロード
25872 ワード
ワッフルカードサービスが気になるなら!
ワッフルカードの表示サービス:https://waffle-card.com/
ワッフル寄宿センター見学:https://github.com/waffle-card
登録の有無に応じてルーティングを処理する
ワッフルカードのサービスでは、ページが大きく3種類に分かれています.
アクセスするには
PrivateRoute
、PublicRoute
ルーティングコンポーネントが実現される.PrivateRoute
ログインのみでアクセスできるページルーティング.
パラメータにルーティングされるページコンポーネントを渡します.
ユーザのグローバル状態に応じて,ログイン時にパラメータとして渡されるページにルーティングする.
ログインしていない場合は、ログインページにルーティングします.
const PrivateRoute = ({
component: Component,
}: PrivateRouteProps): JSX.Element => {
const userInfo = useRecoilValue(userState);
return userInfo ? <Component /> : <Navigate replace to="/login" />;
};
PublicRoute
const PublicRoute = ({
component: Component,
restricted,
}: PublicRouteProps): JSX.Element => {
const userInfo = useRecoilValue(userState);
return userInfo && restricted ? <Navigate replace to="/" /> : <Component />;
};
Router// in Router.tsx
const Router = () => {
return (
<Suspense fallback={<Spinner />}>
<Routes>
<Route path="/" element={<PublicRoute component={HomePage} />} />
<Route
path="/login"
element={<PublicRoute restricted component={LoginPage} />}
/>
<Route
path="/signup"
element={<PublicRoute restricted component={SignUpPage} />}
/>
<Route path="/my-page" element={<PrivateRoute component={MyPage} />} />
<Route path="/guide" element={<PublicRoute component={GuidePage} />} />
<Route path="*" element={<PublicRoute component={NotFoundPage} />} />
</Routes>
</Suspense>
);
};
上記実現したルーティング素子をルータ素子に分離してルーティング処理を行う.コードの印刷とロードの遅延
React.Lazyを使用してページコンポーネントコードをジャンプし、必要に応じてロードするようにしました.現在、ワッフルカードのバンドルバッグの大きさは現在の業界に比べて小さいが、明らかな性能効果は見られない可能性がある.
しかし、初期ロードで必ずしもアクセスしなくてもよいページは非効率的で、不完全ではありますが、初期ロード速度は必ず改善されると思います.
上記のRouterコードは、次のようにSuspenceとLazyを使用して遅延ロードされます.
const HomePage = lazy(() => import('@/pages/HomePage/index'));
const LoginPage = lazy(() => import('@/pages/LoginPage/index'));
const SignUpPage = lazy(() => import('@/pages/SignUpPage/index'));
const MyPage = lazy(() => import('@/pages/MyPage/index'));
const GuidePage = lazy(() => import('@/pages/GuidePage/index'));
const NotFoundPage = lazy(() => import('@/pages/NotFoundPage/index'));
const Router = () => {
return (
<Suspense fallback={<Spinner />}>
<Routes>
<Route path="/" element={<PublicRoute component={HomePage} />} />
<Route
path="/login"
element={<PublicRoute restricted component={LoginPage} />}
/>
<Route
path="/signup"
element={<PublicRoute restricted component={SignUpPage} />}
/>
<Route path="/my-page" element={<PrivateRoute component={MyPage} />} />
<Route path="/guide" element={<PublicRoute component={GuidePage} />} />
<Route path="*" element={<PublicRoute component={NotFoundPage} />} />
</Routes>
</Suspense>
);
};
Reference
この問題について(ルーティングと不活性ロード), 我々は、より多くの情報をここで見つけました https://velog.io/@younoah/waffle-card-route-lazyテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol