๐ ๋ผ์ฐํ ์ ์ ํ ๊น?
- ๊ธฐ์กด์ ์น์ฌ์ดํธ ๋ฐฉ์
์ ํต์ ์ธ ๋ฐฉ์: ์น์ฌ์ดํธ์ ์ ์ํ๋ฉด, ์๋ฒ์์ HTML, CSS, JavaScript ํ์ผ ๋ฑ์ ๋ฐ์์ค๊ณ , ์ด๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ํด์ํด ํ๋ฉด์ ๋ณด์ฌ์ค๋ค.
์ ํ์ด์ง ์ด๋: ์ฌ์ฉ์๊ฐ ์๋ก์ด ํ์ด์ง๋ก ์ด๋ํ๋ ค๋ฉด, ๋ค์ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๊ณ ์ ์ฒด ํ์ด์ง๋ฅผ ์๋ก ๋ถ๋ฌ์จ๋ค.
- ๋ผ์ฐํ
์ ํ๋ฉด?
ํ ๋ฒ์ ๋ก๋ฉ: ์ฒ์ ์น์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ ๋ ํ์ํ ํ์ผ๋ค์ ๋ชจ๋ ๋ถ๋ฌ์จ๋ค. ๊ทธ ํ๋ก๋ ์๋ก์ด ํ์ด์ง๋ฅผ ๋ถ๋ฌ์ฌ ๋ ์๋ฒ์ ๋ค์ ์์ฒญํ์ง ์์๋ ๋จ.
๋งํฌ ํด๋ฆญ์: ์ฌ์ฉ์๊ฐ ๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด, ์ ์ฒด ํ์ด์ง๋ฅผ ์๋ก ๋ถ๋ฌ์ค๋ ๋์ ํ์ํ ๋ถ๋ถ๋ง ์
๋ฐ์ดํธํจ. ์ด๋ ๊ฒ ํ๋ฉด ํ์ด์ง ์ด๋์ด ํจ์ฌ ๋นจ๋ผ์ง๋ค.
โ๏ธ ์ค์ฒฉ ๋ผ์ฐํ
์ค์ฒฉ ๋ผ์ฐํ ์ ํน์ ๊ตฌ์กฐ์ ํ์ด์ง ๋ด์์ ๋ ์์ ๋จ์์ ํ์ด์ง ๋๋ ๊ตฌ์ฑ ์์๋ฅผ ํ์ํ๋ ๋ฐฉ๋ฒ์ ๋งํ๋ค.
์์ ์์ ๋ ์์ ์์๋ค์ด ๋ค์ด ์๋ ๊ฒ๊ณผ ๊ฐ์ ๊ฐ๋ .
๐ ์ง์ ์๋ก ๋ค์ด ๋ณด๋ฉด
- ์ง: ์น์ฌ์ดํธ ์ ์ฒด
- ๋ฐฉ: ํ์ด์ง๋ค (์: ํ, ์๊ฐ ํ์ด์ง ๋ฑ)
- ๊ฐ๊ตฌ: ํ์ด์ง ๋ด์ ๋ ์์ ๊ตฌ์ฑ ์์๋ค (์: ํ ์คํธ ๋ฐ์ค, ์ด๋ฏธ์ง ๋ฑ)
๋ด ๋ฐฉ์ ์ฑ ์์์ ์นจ๋๋ก ์ด๋ํ๋ค๊ณ ํด๋ณด์.
์ด๋ํ ๋ ๋ฐฉ์ ๋๊ฐ๋ค๊ฐ ๋ค์ ๋ค์ด์์ ์นจ๋๋ก ๊ฐ๋๊ฒ ํจ์จ์ ์ผ๊น?
์ฑ ์์์ ์นจ๋๋ก ๋ฐ๋ก ์ด๋ํ๋๊ฒ ํจ์จ์ ์ผ๊น?
๋น์ฐํ ํ์๊ฐ ํจ์จ ์ ์ผ ๊ฒ.
์ฆ ์ค์ฒฉ ๋ผ์ฐํ ์ ํตํด ๋ถ๋ชจ ํ์ด์ง๋ฅผ ์ฌ๋๋๋ง ํ์ง ์๊ณ ์์ ํ์ด์ง๋ง ๋๋๋ง ํ ์ ์์.
์ธ๋ณ๊ทธ๋จ๋ ๋ณด๋ฉด ์ฃ์ธก ์ฌ์ด๋ ๋ฐ๋ ๊ณ ์ ์ปดํฌ๋ํธ๋ก ๋ค๋ฅธ ํญ์ผ๋ก ๋์ด๊ฐ๋ ๋์ผํ๋ค. ์ด ๋ ์ค์ฒฉ ๋ผ์ฐํฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
โญ๏ธ ์ค์ฒฉ ๋ผ์ฐํ ์ฌ์ฉํ๊ธฐ
1) <Outlet> ์ฌ์ฉํ๊ธฐ
- ๊ณตํต์ผ๋ก ์ฌ์ฉํ ์ปดํฌ๋ํธ์ Route (/workspace,๋ถ๋ชจ์ปดํฌ)๋ก ์์ ์ปดํฌ๋ฅผ ๊ฐ์ธ์ค๋ค.
- ์์์ปดํฌ๋ ๋ถ๋ชจ ์ปดํฌ์ Route path๋ฅผ ์ด์ด์(/workspace/channel ์ด๋ /workspace/dm ๊ฐ์ด) ์์ฑํด์ผํ๋ค.
(๊ทธ๋์ผ ๋ ๋๋ง ๋จ)
- ๋ถ๋ชจ ์ปดํฌ์์ ์์์ปดํฌ๊ฐ ์ฌ์ฉ๋ ์์ญ์ <Outlet>ํ๊ทธ๋ก ํ์ํด์ฃผ๋ฉด ๋๋ค.
//App.tsx
import React from 'react';
import {Routes,Route} from 'react-router-dom';
import loadable from '@loadable/component';
const Workspace = loadable(()=> import('@layouts/Workspace'))
const Channel = loadable(()=>import('@pages/Channel'))
const DirectMessage = loadable(()=>import('@pages/DirectMessage'))
const App = () => {
return (
<div>
<Routes>
<Route path ='/workspace' element ={<Workspace/>}>
<Route path="/workspace/channel" element={<Channel></Channel>}></Route>
<Route path="/workspace/dm" element={<DirectMessage></DirectMessage>}></Route>
</Route>
</Routes>
</div>
)
}
//Workspace.tsx
import { Outlet} from 'react-router'
const Workspace = () => {
return (
<div>
<Outlet></Outlet>
</div>
)
}
2)<Outlet> ์ฌ์ฉ ์ํ๊ธฐ
- ๋ถ๋ชจ์ปดํฌ์ Route path ๋์ * (์์คํ๋ฆฌ์นด)๋ฅผ ๋ถ์ฌ์ค๋ค. ์ด ์๋ฏธ๋ /workspace ๋ค์ ์ด๋ค url์ด ๋ ๋ถ๋๋ค๋ ๋ป.
- ๋ถ๋ชจ ์ปดํฌ์์ ์์์ปดํฌ๊ฐ ํํ๋ ๊ณณ์ Routes ์ Route๋ก ๋ผ์ฐํ ํด์ค๋ค. ์ด๋ path๋ ๋ถ๋ชจ route path๋ฅผ ๋บธ๋ค.
//App.tsx
import React from 'react';
import {Routes,Route} from 'react-router-dom';
import loadable from '@loadable/component';
const Workspace = loadable(()=> import('@layouts/Workspace'))
const App = () => {
return (
<div>
<Routes>
<Route path ='/workspace/*' element ={<Workspace/>}></Route>
</Routes>
</div>
)
}
//Workspace.tsx
import { Outlet} from 'react-router'
import loadable from '@loadable/component';
const Channel = loadable(()=>import('@pages/Channel'))
const DirectMessage = loadable(()=>import('@pages/DirectMessage'))
const Workspace = () => {
return (
<div>
<Routes>
<Route path="/channel" element={<Channel></Channel>}></Route>
<Route path="/dm" element={<DirectMessage></DirectMessage>}></Route>
</Routes>
</div>
)
}
'frontEnd > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ด๋ค ํ์ด์ง์ ์๋์ง ์ฝ๊ฒ ์๋ ค์ฃผ๊ธฐ : NavLink (0) | 2024.01.05 |
---|---|
๋์ ๋ผ์ฐํ ์ผ๋ก ๋ผ์ฐํธ ์ค๊ณ : Route Parameter (0) | 2024.01.04 |
React์์ ๋น๋๊ธฐ ๋ฐ์ดํฐ ๊ด๋ฆฌํ๊ธฐ : SWR (0) | 2023.12.28 |
์ฌ๋๋๋ง ์ ํจ์ ์ฌ์์ฑ ๋ฐฉ์ง: useCallback ํ์ฉํ๊ธฐ (1) | 2023.12.26 |
Header์ Footer์ ํน์ ํ์ด์ง์์ ์ ๋ณด์ด๊ฒ ํ๊ธฐ! (0) | 2023.11.24 |