-
[ToyProject-Todomate] ํฌ๋๋ฉ์ดํธ ํด๋ก ํ๋ก์ ํธ 12WEB Dev/ToyProject 2021. 12. 19. 19:49728x90
๐ท CloneTodo โ - Todomate Clone Project | Team CloneMate
CloneTodo : ๋ง์ ์ฌ๋๋ค์ด ์ฌ๋ํ๋ ํฌ๋๋ฉ์ดํธ๋ฅผ ํด๋ก ํ์ฌ ์น ์๋น์ค๋ฅผ ๋ฐฐํฌํด๋ณด๋ ํ๋ก์ ํธ
๊ทธ๋ผ ๊ณ์ ์งํํด๋ณด๊ธฐ!
์ค๋์ todo
โ ๊ฐ์ ํ๊ธฐ ์ปดํฌ๋ํธ
โก ๊ธฐ๋ณธ NavBar ์ปดํฌ๋ํธ
โก ๋ฉ์ธ NavBar ์ปดํฌ๋ํธ
โก ๋ฉ์ธ Feed ์ปดํฌ๋ํธ
โ ๊ฐ๋ฅํ๋ฉด ๊นํ ํธ์คํ ์ผ๋ก ๋ฐฐํฌ๊น์ง
2. ๊ธฐ๋ณธ NavBar ์ปดํฌ๋ํธ
NavBar๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์๋ก์ด MUI ์ปดํฌ๋ํธ๋ฅผ ์ฐพ์๋ณธ๋ค!
๊ธฐ๋ณธ NavBar๋ ๊ฐ ํ์ด์ง์ ์ ๋ชฉ์ด ํ์๋๊ณ , ๋ค๋ก๊ฐ๊ธฐ๊ฐ ์์ผ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ํน๋ณํ ๊ธฐ๋ฅ์ ํ์์์ง๋ง
๋ฉ์ธ NavBar์ ๊ฒฝ์ฐ ์ค๋ฅธ์ชฝ์ ํ์ ๋๋ ๋ฉ๋ด๊ฐ ๋ฑ์ฅํด์ผ ํ๋ค.
MUI์์ Bottom Navigation์ด๋ App Bar๊ฐ ์ ์ผ ๋น์ทํ๊ฑฐ ๊ฐ์๋ฐ
๊ธฐ๋ณธ NavBar ์ปดํฌ๋ํธ์๋ App Bar ๋ง, ๋ฉ์ธ NavBar์๋ App Bar์ Drawer์ ๊ฒฐํฉํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
App Bar ๋์์ธ ์ค์๋ Basic์ ๊ณจ๋๋๋ฐ ์๋์ ๊ฐ์ด ์๊ฒผ๋ค.
์ด ์ปดํฌ๋ํธ๋ ์์ฒญ๋๊ฒ ใ ใ ๋ง์ ํจํค์ง๋ฅผ import ํด์ผํ๋๋ฐ ์ฝ๋๋ ์๋์ ๊ฐ๋ค.
import * as React from 'react'; import AppBar from '@mui/material/AppBar'; import Box from '@mui/material/Box'; import Toolbar from '@mui/material/Toolbar'; import Typography from '@mui/material/Typography'; import Button from '@mui/material/Button'; import IconButton from '@mui/material/IconButton'; import MenuIcon from '@mui/icons-material/Menu'; export default function ButtonAppBar() { return ( <Box sx={{ flexGrow: 1 }}> <AppBar position="static"> <Toolbar> <IconButton size="large" edge="start" color="inherit" aria-label="menu" sx={{ mr: 2 }} > <MenuIcon /> </IconButton> <Typography variant="h6" component="div" sx={{ flexGrow: 1 }}> News </Typography> <Button color="inherit">Login</Button> </Toolbar> </AppBar> </Box> ); }
์ด ์ฝ๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด BasicNavBar.js ๋ผ๋ ์ปดํฌ๋ํธ๋ฅผ ํ๋ ๋ง๋ค์ด ์์ ์ฝ๋๋ฅผ ๊ทธ๋๋ก ๋ณต์ฌ ๋ถ์ฌ๋ฃ๊ธฐ ํด์ค๋ค.
ButtonAppBar๋ผ๊ณ ์ง์ ๋ ํจ์๋ช ์ BasicNavBar๋ก ๋ฐ๊ฟ์ฃผ๊ณ ํ์ด์ง ์๋จ์ ๋ค์ด๊ฐ๊ฑฐ๊ธฐ ๋๋ฌธ์ BasicNavBar๋ฅผ App.js์ ์๋จ์ ๋ฃ์ด์ค๋ค.
import React from "react"; import "../stylesheets/App.css"; import { Button } from "@mui/material"; import { ThemeProvider, createTheme } from "@mui/material/styles"; import { Switch, Route, useHistory } from "react-router-dom"; import Signin from "./Signin"; import Join from "./Join"; import BasicNavBar from "./BasicNavBar"; const theme = createTheme({ status: { danger: "#e53e3e", }, palette: { primary: { main: "#0971f1", darker: "#053e85", }, neutral: { main: "#64748B", contrastText: "#fff", }, btn: { main: "#f2f2f2", contrastText: "#111", }, }, }); function App() { let history = useHistory(); return ( <ThemeProvider theme={theme}> <BasicNavBar/> <Switch> <Route exact path="/"> <div className="App"> <div className="header"> <img className="main_img" src="images/todomate.jpg" /> <h1>todo mate</h1> <h3>ํ ์ผ์ ์์ฑ, ๊ณํ, ๊ด๋ฆฌํ์ธ์.</h3> </div> <div className="start_btn"> <Button className="join_btn" color="btn" variant="contained" onClick={() => { history.push("/join"); }} > ๊ฐ์ ํ๊ธฐ </Button> <Button className="signin_btn" color="btn" variant="contained" onClick={() => { history.push("/signin"); }} > ๋ก๊ทธ์ธ </Button> </div> </div> </Route> <Route exact path="/join"> <Join /> </Route> <Route exact path="/signin"> <Signin /> </Route> </Switch> </ThemeProvider> ); } export default App;
์ด๋ ๊ฒ ํ๋ฉด import ๋ ๋์๋๋ฐ, BasicNavBar์ ๊ด๋ จ๋ ์๋ฌ ๋ฉ์์ง๊ฐ ๋ฌ๋ค.
์๋ฌ ๋ฉ์์ง๋ ./src/components/BasicNavBar.js Module not found: Can't resolve '@mui/icons-material/Menu' in ...
์ด๊ฑฐ๋ @mui/icons-material/Menu ์ ๊ฐ์ ์์ด์ฝ ํจํค์ง๋ค์ด npm ์ ํตํด ์ค์น๋์ง ์์์ ๊ทธ๋ด ์ ์๋ค.
npm i @material-ui/core npm i @material-ui/icons
์์ ๊ฐ์ ๋ช ๋ น์ด๋ค์ ํตํด ํจํค์ง๋ฅผ ์ค์นํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ ์ค์นํ์ผ๋ ์ฌ์ ํ ๋๊ฐ์ ์ํฉ์ธ ๊ฒฝ์ฐ, ํด๋น ์์ด์ฝ์ด ์ง๊ธ MUI์ ๋ฒ์ ๊ณผ ๋ง์ง ์์์ ๊ทธ๋ด ์ ์๋ค.
(MUI์ ๋ฒ์ ์ v4์ด๋ ์์ด์ฝ์ v5์ธ ๊ฒฝ์ฐ)
๊ทธ๋ผ ๊ทธ ์์ด์ฝ์ ์ด์ ๋ฒ์ ์์ ์ฐพ์์ ๋์ฒดํด์ผ ํ๋ค!
๋์ ๊ฒฝ์ฐ MenuIcon ์ปดํฌ๋ํธ๋ฅผ ์ญ์ ํ๋ ์ ์์ ์ผ๋ก ์๋ํ๋ค.
๊ทธ๋์ MenuIcon ๋์ ์๋์ DehazeIcon์ผ๋ก ๋ณ๊ฒฝํ๋ค.
import DehazeIcon from '@material-ui/icons/Dehaze';
โป MUI v4 ๋ฒ์ Meterial-ui icons
Material Icons - Material-UI
1,100+ React Material icons ready to use from the official website.
v4.mui.com
๊ทธ๋ฌ๋ฉด ์ด๋ ๊ฒ ์์ Navbar ์์ฑ๐
์์๊ตฌ๋ง! ํ์ํ ๊ฒ๋ค์ ๋จ๊ธฐ๊ณ ์ข์ธก์ < ์ ๊ฐ์ ๋ค๋ก๊ฐ๊ธฐ ์์ด์ฝ์ ๋ฃ๋ ๋ฑ ์์๊ณผ ๋ชจ์ ์ปค์คํ ์ ์งํํ๋ค.
import React from 'react'; import AppBar from '@mui/material/AppBar'; import Box from '@mui/material/Box'; import Toolbar from '@mui/material/Toolbar'; import Typography from '@mui/material/Typography'; import IconButton from '@mui/material/IconButton'; import NavigateBeforeIcon from '@material-ui/icons/NavigateBefore'; export default function BasicNavBar () { return ( <Box sx={{ flexGrow: 1 }}> <AppBar position="static" color="nav" sx={{ boxShadow:"none" }}> <Toolbar> <IconButton size="large" edge="start" color="inherit" aria-label="back" sx={{ mr: 2 }} > <NavigateBeforeIcon /> </IconButton> <Typography className="navbar_title" variant="h6" component="div" color="inherit" fontSize={16} fontWeight={600} sx={{ margin: "auto", transform: "translateX(-50%)" }}> ์ ๋ชฉ </Typography> </Toolbar> </AppBar> </Box> ); }
BasicNavBar ์ปดํฌ๋ํธ์ CSS๋ props์ ๋ฃ์ด์ ๋ง๋ค์ด๋ดค๋ค. color๋ App.js ์ ThemeProvider์ palette์ nav ๋ผ๋ ์์๊ฐ์ ์คฌ๊ณ (์ฌ์ค ํฐ์์ด๋ฉด์), sx ๋ผ๋ props์์ ๋๋ถ๋ถ์ CSS๋ฅผ ์๋ณผ ์ ์์๋ค.
๊ธฐ์กด AppBar ์ปดํฌ๋ํธ์ ์๋ ๋ฐฐ๊ฒฝ์ ๊ฐ๊ณผ ๊ทธ๋ฆผ์, ํฐํธ ์ฌ์ด์ฆ ๋ฑ์ ์์ ํ๊ณ margin auto๋ฅผ ์ด์ฉํด ๊ธ์๊ฐ ๊ฐ์ด๋ฐ๋ก ์ค๋๋ก ํ ๋ค ์ฝ๊ฐ ์น์ฐ์น ๊ฒ์ transform์ผ๋ก ์์ ํ๋ ๊ณ ์ ์ ์ธ CSS ์์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค.
๊ฒฐ๊ณผ๋ฌผ์ ์๋์ ๊ฐ๋ค.
728x90'WEB Dev > ToyProject' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ToyProject-Todomate] ํฌ๋๋ฉ์ดํธ ํด๋ก ํ๋ก์ ํธ 14 (0) 2021.12.21 [ToyProject-Todomate] ํฌ๋๋ฉ์ดํธ ํด๋ก ํ๋ก์ ํธ 13 (0) 2021.12.19 [ToyProject-Todomate] ํฌ๋๋ฉ์ดํธ ํด๋ก ํ๋ก์ ํธ 11 (0) 2021.12.19 [ToyProject-Todomate] ํฌ๋๋ฉ์ดํธ ํด๋ก ํ๋ก์ ํธ 10 (0) 2021.12.15 [ToyProject-Todomate] ํฌ๋๋ฉ์ดํธ ํด๋ก ํ๋ก์ ํธ 09 (0) 2021.12.14