๐ฐ ๋ฆฌ์กํธ ๋ผ์ฐํฐ v6 ๋ฒ์ ์์ ์ค์ฒฉ ๋ผ์ฐํ ์ ์ด์ฉํ๋ฉด ๋ถ๋ชจ ๋ ์ด์์์ ๊ทธ๋๋ก ๋๊ณ ์์ ๋ ์ด์์๋ง ์ฝ๊ฒ ๊ต์ฒดํ ์ ์๋ค.
โ ์ค์ฒฉ ๋ผ์ฐํ
v6์์ ์ค์ฒฉ ๋ผ์ฐํ ์ด ์ปดํฌ๋ํธ์ children๊ณผ ๊ฐ์ ๊ฐ๋ ์ผ๋ก ์ค์ฒฉ์ด ๊ฐ๋ฅํด์ก๊ณ , ๋ ์ง๊ด์ ์ผ๋ก ๋ณํ๋ค.
๋ง์ฝ, member ์ member/:memberId ํ์ด์ง๊ฐ ์๋ค๊ณ ํ๋ค๋ฉด, ์ด์ ์๋ ๊ฐ๊ฐ ํ์ค์ฉ ์ฐจ์งํ์๋๋ฐ,
v6์์๋ member ๋ผ์ฐํธ ํ์์ :memberId ๊ฐ ํฌํจ๋ Route๋ฅผ ์ถ๊ฐํ๋ฉด ์ค์ฒฉ ๋ผ์ฐํ ์ด ๋๋ค.
ํ์์ ์์ผ๋ฉด ์๋์ผ๋ก / ๋ก ๊ตฌ๋ถ๋๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ์ ์ธ / ๋ฅผ path์ ์ถ๊ฐํ ํ์๊ฐ ์์ด์ก๋ค.
//v5
<Switch>
<Route path="/member" />
<Route path="/member/:memberId" />
</Switch>
//v6
<Routes>
<Route path="/member">
<Route path=":memberId" /> // /member/:memberId
</Route>
</Routes>
โ ๋ ์ด์์
์ค์ฒฉ ๋ผ์ฐํ ์ ์์ฒ๋ผ ๊ตฌ์ฑํ๊ณ ๋๋ฉด Outlet์ ํตํด์ ์์ ์ปดํฌ๋ํธ๋ฅผ ๋ ์ด์์ํ ํ ์ ์๊ฒ ๋์๋ค.
์ค์ ๋ก ์์ ๋ฅผ ํตํด ํ์ธํด๋ณด์.
[index.js]
"/"๋ผ๋ path๋ฅผ ๊ฐ์ง๋ฉด App1 ์ปดํฌ๋ํธ๊ฐ ์คํ๋๊ณ App1์ ์์ ์ปดํฌ๋ํธ๋ First, Second, Third๊ฐ ์๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก "/app2" ๋ผ๋ path๋ฅผ ๊ฐ์ง๋ฉด App2 ์ปดํฌ๋ํธ๊ฐ ์คํ๋๊ณ App2์ ์์ ์ปดํฌ๋ํธ๋ First, Second, Third๊ฐ ์๋ค.
import React from "react";
import ReactDOM from "react-dom/client";
import { createBrowserRouter, RouterProvider } from "react-router-dom";
import App1 from "./App1";
import App2 from "./App2";
import First from "./First";
import NotFound from "./NotFound";
import Second from "./Second";
import Third from "./Third";
const router = createBrowserRouter([
{
path: "/",
element: <App1 />,
errorElement: <NotFound />,
children: [
{ index: true, element: <First /> },
{ path: "second", element: <Second /> },
{ path: "third", element: <Third /> },
],
},
{
path: "/app2",
element: <App2 />,
errorElement: <NotFound />,
children: [
{ index: true, element: <First /> },
{ path: "second", element: <Second /> },
{ path: "third", element: <Third /> },
],
},
]);
const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
<React.StrictMode>
<RouterProvider router={router} />
</React.StrictMode>
);
[App1.js]
App1์์ Outlet์ ํตํด ์์ ์ปดํฌ๋ํธ๋ฅผ ๋ ์ด์์ํ ํ๊ณ ์๋ค.
import { Outlet } from "react-router-dom";
function App1() {
return (
<div>
<h1>This is App1 Header</h1>
<Outlet />
<h2>This is App1 Footer</h2>
</div>
);
}
export default App1;
[App2.js]
App2 ๋ํ Outlet์ ํตํด ์์ ์ปดํฌ๋ํธ๋ฅผ ๋ ์ด์์ํ ํ๊ณ ์๋ค.
import { Outlet } from "react-router-dom";
function App2() {
return (
<div>
<h1>This is App2 Header</h1>
<Outlet />
<h2>This is App2 Footer</h2>
</div>
);
}
export default App2;
[First, Second, Third.js]
function First() {
return <div className="First">Hello world First</div>;
}
export default First;
function Second() {
return <div className="Second">Hello world Second</div>;
}
export default Second;
function Third() {
return <div className="Third">Hello world Third</div>;
}
export default Third;
โ ๊ฒฐ๊ณผํ๋ฉด
์ค์ฒฉ ๋ผ์ฐํ ์ ์์ฒ๋ผ ๊ตฌ์ฑํ๊ณ ๋๋ฉด Outlet์ ํตํด์ ์์ ์ปดํฌ๋ํธ๋ฅผ ๋ ์ด์์ํ ํ ์ ์๊ฒ ๋์๋ค.
์ค์ ๋ก ์์ ๋ฅผ ํตํด ํ์ธํด๋ณด์.
์๋๋ App1๊ณผ App2์ ์ปดํฌ๋ํธ๊ฐ ์ค์ฒฉ ๋ผ์ฐํ ์ ์ด๋ฃจ๊ณ ์์ผ๋ฉฐ ์๋ก Outlet ์ ํตํด ์์ ์ปดํฌ๋ํธ๋ฅผ ํํํ๊ณ ์๋ค.
'Basic > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] recoil์ ์ด์ฉํ ์ํ ๊ด๋ฆฌ (0) | 2023.01.20 |
---|---|
[React] infinity scroll ๋ฌดํ ์คํฌ๋กค ๋ง๋ค๊ธฐ (0) | 2023.01.15 |
[React] Custom hook ๋ชจ์ (0) | 2023.01.02 |
dashboard design example (0) | 2021.03.24 |
Redux๋ฅผ ์ด์ฉํ Counter ์์ (0) | 2021.03.24 |