[React]Router v 6-特定のコンポーネントを非表示にする(ログインページからNavBarを削除する)
20565 ワード
React Router V 6で紹介されているOutletは、ネストされたルータの管理をより容易にします.以下の2つのケースを例としてまとめた.の特定ページで、タイトル(NavBar)を非表示にしたいと思います. サブルーティングを組み合わせて、トップレベルのルーティングで管理したいです.
NavBar Routeでは、以下に示すように、NavBarが表示しなければならない要素をサブRouteに入れます.
(App.js)
(NavBar.js)
これで終わりです.ログインページにNavBarが表示され、ログインページや会員ログインページには表示されません.
HTML構造もチェックしてみます.
また、親サブアセンブリ間でPropsを渡す形式を
propsを転送するにはContextしか使えません.(注:https://stackoverflow.com/questions/63765196/pass-props-to-outlet-in-react-router-v6/70376644)
ユーザー関連のサブコンポーネントを最上位レベルで管理する場合は、次のコードを記述します.
(App.js)
(User.js)
トップルータにもpathが指定されており、ページのパスは
User.jsには具体的な内容はありませんが、ここではサブルータを統合管理することができます.この方法は、プライマリ・サブディレクトリ・フォーマットを作成する場合にも使用できます.
HTML構造は以下の通りです.
User.サブルータはjsの要素で包むこともできます.
(User.js)
例1。ログインページからNavBarを削除
NavBar Routeでは、以下に示すように、NavBarが表示しなければならない要素をサブRouteに入れます.
(App.js)
function App() {
return (
<div className="App">
<Router>
<Routes>
<Route element={ <NavBar /> }>
// NavBar가 보여야 하는 페이지
<Route path="/" element={ <LandingPage /> } />
</Route>
// NavBar를 숨겨야 하는 페이지
<Route path="/login" element={ <LoginPage /> } />
<Route path="/register" element={ <RegisterPage /> } />
<Route path="*" element={ <NotFound /> } />
</Routes>
</Router>
</div>
);
}
export default App;
NavBar素子からOutletを導入し、底部に<Outlet />
を入れる.(NavBar.js)
import { Outlet } from "react-router";
const NavBar = () => {
return (
<>
<section className="navbar">
...
</section>
<Outlet />
</>
)
};
export default NavBar;
OutletはさっきのNavBarrouteのサブルーティング集合と考えられる.(NavBarが表示しなければならないページ)これで終わりです.ログインページにNavBarが表示され、ログインページや会員ログインページには表示されません.
HTML構造もチェックしてみます.
また、親サブアセンブリ間でPropsを渡す形式を
<Outlet />
に適用すると、エラーが発生します.propsを転送するにはContextしか使えません.(注:https://stackoverflow.com/questions/63765196/pass-props-to-outlet-in-react-router-v6/70376644)
import { Outlet } from "react-router";
const name = "철수";
const NavBar = () => {
return (
<>
<section className="navbar">
...
</section>
// 이러한 props 전달은 에러가 뜬다.
<Outlet name={ name }/>
</>
)
};
export default NavBar;
例2。最上位ルータからのユーザー関連ページの管理(サブパスの作成)
ユーザー関連のサブコンポーネントを最上位レベルで管理する場合は、次のコードを記述します.
(App.js)
function App() {
return (
<div className="App">
<Routes>
<Route path="/" element={ <LandingPage /> } />
// User 관련 페이지 묶음
<Route path='/user' element={<User />} >
<Route path=':userId' element={<UserDetail />} />
</Route>
<Route path="*" element={ <NotFound /> } />
</Routes>
</div>
)
}
NavBarとは異なり、親ルータのパスも指定されます.これで何が起こるの?(User.js)
import { Outlet } from "react-router";
const User = () => {
return (
<>
<Outlet />
</>
)
}
export default User;
前述したように,コード作成後,ユーザIDに応じて異なるページを表示することができる.トップルータにもpathが指定されており、ページのパスは
/user/userId
です.User.jsには具体的な内容はありませんが、ここではサブルータを統合管理することができます.この方法は、プライマリ・サブディレクトリ・フォーマットを作成する場合にも使用できます.
HTML構造は以下の通りです.
User.サブルータはjsの要素で包むこともできます.
(User.js)
import { Outlet } from "react-router";
const User = () => {
return (
<section className="user">
<Outlet />
</section>
)
}
export default User
User.jsでは<section>
エリマンで<Outlet />
を包み、出力は以下の通りである.Reference
この問題について([React]Router v 6-特定のコンポーネントを非表示にする(ログインページからNavBarを削除する)), 我々は、より多くの情報をここで見つけました https://velog.io/@nemo/React-Router-v6-hide-componentテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol