-
[ToyProject-Todomate] ํฌ๋๋ฉ์ดํธ ํด๋ก ํ๋ก์ ํธ 09WEB Dev/ToyProject 2021. 12. 14. 00:13728x90
๐ท CloneTodo โ - Todomate Clone Project | Team CloneMate
CloneTodo : ๋ง์ ์ฌ๋๋ค์ด ์ฌ๋ํ๋ ํฌ๋๋ฉ์ดํธ๋ฅผ ํด๋ก ํ์ฌ ์น ์๋น์ค๋ฅผ ๋ฐฐํฌํด๋ณด๋ ํ๋ก์ ํธ
์ด์ ์ ์ค๋ฅ๋ useHistory์ ๋ฒ์ ๋ฌธ์ ๋ผ๊ณ ํด์ npm uninstall --save ๋ฅผ ์ด์ฉํด ํจํค์ง๋ฅผ ์ญ์ ํ๊ณ ๋ค์ด๊ทธ๋ ์ด๋๋ฅผ ํ๋ ค๊ณ ํ๋ค.
npm uninstall --save history@5 react-router-dom@6
์์ ๋ช ๋ น์ด๋ก ์ค์นํ ๊ฒ์ ์ญ์ ํ๊ณ , ๋ค์ react-router-dom ์ ์ค์นํ๋ค.
npm install react-router-dom@5
๊ทธ๋ฆฌ๊ณ index.js ํ์ผ์ App ์ปดํฌ๋ํธ๋ฅผ <BrowserRouter> </BrowserRouter>๋ก ๊ฐ์ธ์ค๋ค.
(โ Strict๋ชจ๋ ์ปดํฌ๋ํธ๋ ์ญ์ ํ์ด์!)
ReactDOM.render( <BrowserRouter> <App /> </BrowserRouter>, document.getElementById('root') );
๊ทธ ๋ค์ App.js์ ์ฌ๋ฌ๊ฐ์ง ํจํค์ง๋ค์ import ํด์จ๋ค.
์ฐ์ ์ด๋ ๊ฒ ์ธ ๊ฐ์ง๋ฅผ import ํ๋ค.
import { Link, Route, Switch } from 'react-router-dom';
๊ทธ ๋ค์์ ํ์ด์ง๊ฐ ๋ฐ๋์ด์ผ ํ ๊ณณ์ Route ์ปดํฌ๋ํธ๋ฅผ ๋ฃ์ด์ค๋ค.
๋์ ๊ฒฝ์ฐ์๋ ํ๋ฉด์ ์ผ๋ถ๊ฐ ์๋ ์ ์ฒด๊ฐ ์๋ก์ด ํ๋ฉด์ผ๋ก ๊ต์ฒด๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ return ๋ค์ ThemeProvider ์ปดํฌ๋ํธ์ ๋ค์์ Route ์ปดํฌ๋ํธ๋ฅผ ๋ฃ์ด์คฌ๋ค.
Route ์ ์ฒซ๋ฒ์งธ๋ /๋ก App ์ปดํฌ๋ํธ๊ฐ ๋ค์ด๊ฐ ์ ์๋๋ก
<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" variant="contained" color="btn"> ๊ฐ์ ํ๊ธฐ </Button> <Button className="signin_btn" color="btn" variant="contained"> ๋ก๊ทธ์ธ </Button> </div> </div> </Route>
์์ ๊ฐ์ด ์ฝ๋๋ฅผ ์ง ์ฃผ๊ณ ,
/signin path์๋ Signin ์ปดํฌ๋ํธ๋ฅผ ๋ฃ์ด์ค๋ค.
<Route exact path="/signin"> <Signin /> </Route>
์ด๋ ๊ฒ ํ๋ฉด ๋ก์ปฌ ์ฃผ์ /signin์ ํ์ ๋ ์ ๋ฒ์ Signin ์ปดํฌ๋ํธ์ ๋ฃ์ด๋ MUI FormControl ์ปดํฌ๋ํธ๊ฐ ๋ํ๋๋ค.
๊ทธ๋ผ ๋ก๊ทธ์ธ ๋ฒํผ์ ํด๋ฆญํ์ ๋ /signin์ผ๋ก ๋์ด๊ฐ๊ฒ ํ๋ ค๋ฉด?
์ด์ useHistory๋ฅผ ์จ๋ณด์!
App.js ํ์ผ์ useHistory๋ฅผ import ํ๋ค.
import { useHistory } from 'react-router-dom'; // ์ด๋ฏธ react-router-dom์ ์ด์ฉํด์ Route๋ฅผ import ํ๊ณ ์์ด์ ์๋์ ๊ฐ์ด ํ ์ ์๋ค. // import { Route, useHistory } from "react-router-dom";
๊ทธ๋ฆฌ๊ณ App( ) ํจ์ ์์ let history = useHistory();๋ฅผ ๋ฃ์ด hook ์ฒ๋ผ useHistory()๋ฅผ ์ฌ์ฉํ๋ค.
Button ์ปดํฌ๋ํธ ์ค ๋ก๊ทธ์ธ ๋ฒํผ์ onClick์ ์ฌ์ฉํ๋๋ฐ, ๋ด๋ถ์ ์ฝ๋ฐฑํจ์๋ฅผ ์ ์ธํ๊ณ history ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ค.
<Button className="signin_btn" color="btn" variant="contained" onClick={()=>{ history.push('/signin') }}>
๋ผ์ฐํฐ ์์ฑ~!
์ธ์ค ์์์ง๋ง "/signin"์ผ๋ก ์ ์ํ๋ฉด "/" ํ์ด์ง ํ๋จ์ ํ์๋๊ณ ์๊ธฐ ๋๋ฌธ์ Switch ๋ฌธ๋ฒ์ ํตํด ํด๋น ํ๋ฉด๋ง ํ์๋๋๋ก ๋ง๋ค์ด ์ค๋ค.
Route ์ปดํฌ๋ํธ ๋ฐ์ <Switch></Switch> ๋ก ๊ฐ์ธ์ฃผ๋ฉด ๋๋ค.
์ต์ข ์ฝ๋๋ ์ด๋ ๋ค.
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"; 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}> <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" variant="contained" color="btn"> ๊ฐ์ ํ๊ธฐ </Button> <Button className="signin_btn" color="btn" variant="contained" onClick={() => { history.push("/signin"); }} > ๋ก๊ทธ์ธ </Button> </div> </div> </Route> <Route exact path="/signin"> <Signin /> </Route> </Switch> </ThemeProvider> ); } export default App;
728x90'WEB Dev > ToyProject' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ToyProject-Todomate] ํฌ๋๋ฉ์ดํธ ํด๋ก ํ๋ก์ ํธ 11 (0) 2021.12.19 [ToyProject-Todomate] ํฌ๋๋ฉ์ดํธ ํด๋ก ํ๋ก์ ํธ 10 (0) 2021.12.15 [ToyProject-Todomate] ํฌ๋๋ฉ์ดํธ ํด๋ก ํ๋ก์ ํธ 08 (0) 2021.12.13 [ToyProject-Todomate] ํฌ๋๋ฉ์ดํธ ํด๋ก ํ๋ก์ ํธ 07 (0) 2021.12.10 [ToyProject-Todomate] ํฌ๋๋ฉ์ดํธ ํด๋ก ํ๋ก์ ํธ 06 (1) 2021.12.09