Share
Sign In
๐Ÿ“„

๐ŸšจReact-router-dom v6๋กœ ๋ฐ”๋€Œ๋ฉด์„œ ๋‹ฌ๋ผ์ง„ ์  ์ •๋ฆฌ

์˜์–ด๋ฅผ ์ž˜ํ•˜๋Š” ์‚ฌ๋žŒ์€ ๊ณต์‹ ๋ฌธ์„œ ํ™•์ธ!
Switch ๋Œ€์‹  Routes๋กœ
Switch ๋Œ€์‹  Routes๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.
exact ์˜ต์…˜์ด ์‚ฌ๋ผ์กŒ๋‹ค. ์ด์ œ๋Š” ํ•ญ์ƒ exact ์˜ต์…˜์„ ์ ์šฉ๋ฐ›๋Š”๋‹ค.
Route๋Š” ํ•ญ์ƒ Routes ์ง์†์œผ๋กœ ๋‘˜๋Ÿฌ์Œ“์—ฌ์•ผ ํ•œ๋‹ค.
๊ธฐ์กด์ฝ”๋“œ
<Switch> <Route path="/" ..... /> </Switch>
๋ฐ”๋€์ฝ”๋“œ
<Routes> <Route path="/" ..... /> </Routes>
Route children์ด๋‚˜ component๊ฐ€ ์‚ฌ๋ผ์ง€๊ณ  element์‚ฌ์šฉ
๊ธฐ์กด์ฝ”๋“œ
<Route path="/" exact component={HomePage} /> <Route path="/login" exact> <LoginPage /> </Route>
๋ฐ”๋€์ฝ”๋“œ
<Route path="/" exact element={<HomePage />} /> <Route path="/login" exact element={<LoginPage />} />
์„œ๋ธŒ ๊ฒฝ๋กœ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ *๋ฅผ ์‚ฌ์šฉ
๊ธฐ์กด์ฝ”๋“œ
<Route path="/users/:username" component={UsersPage} />
๋ฐ”๋€์ฝ”๋“œ
<Route path="/users/:username/*" element={<UsersPage />} />
NavLink์— activeStyle, activeClassName ์‚ญ์ œ
๊ธฐ์กด์ฝ”๋“œ
<NavLink to="/messages" style={{ color: "blue"}} activeStyle={{ color: "green"}}> Messages </NavLink> <NavLink to="/messages" className="nav-link" activeClassName="activated"> Messages </NavLink>
๋ฐ”๋€์ฝ”๋“œ
<NavLink to="/messages" style={({ isActive }) => ({ color: isActive ? 'green' : 'blue' })}> Messages </NavLink> <NavLink to="/messages" className={({ isActive }) => "nav-link" + (isActive ? " activated" : "") }> Messages </NavLink>
pathnameย ๊ฐ€์ ธ์™€ styled-components์™€ ๊ฒฐํ•ฉํ•˜๋Š” useLocation
์•„๋ž˜ ์ฝ”๋“œ์™€ ๊ฐ™์ดย useLocationย Hook์„ ์‚ฌ์šฉํ•˜์—ฌ pathname์„ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
import React from "react"; import { Link, useLocation } from "react-router-dom"; import styled from "styled-components"; const HeaderWrapper = styled("header")` margin-bottom: 30px; `; const List = styled("ul")` display: flex; `; const Item = styled("li")` margin-right: 20px; text-transform: uppercase; font-weight: 600; color: ${(props) => (props.selected ? "white" : "black")}; background-color: ${(props) => (props.selected ? "#f1c40f" : "white")}; `; const Header = () => { const { pathname } = useLocation(); return ( <HeaderWrapper> {/* header ํƒœ๊ทธ */} <List> {/* ul ํƒœ๊ทธ */} <Item selected={pathname.startsWith("/web")}> {/* li ํƒœ๊ทธ */} <Link to="/web">Go to Web</Link> </Item> <Item selected={pathname === "/design"}> <Link to="/design">Go to Design</Link> </Item> <Item selected={pathname === "/server"}> <Link to="/server">Go to Server</Link> </Item> </List> </HeaderWrapper> ); }; export default Header;
useParams๋กœ :id path๋ฅผ ์ด์šฉํ•˜๊ธฐ
useParamsย Hook์„ ์ด์šฉํ•˜์—ฌย :idย ๊ฐ’์„ ๋ฐ›์•„์˜ต๋‹ˆ๋‹ค.
// WebPost.js import React from "react"; import { useParams } from "react-router"; const WebPost = () => { const { id } = useParams(); return <div>#{id}๋ฒˆ์งธ ํฌ์ŠคํŠธ</div>; }; export default WebPost;
useHistory ์‚ญ์ œ, useNavigate๋กœ ๋ณ‘ํ•ฉ
useHistory๋กœ ๊ธฐ์กด์˜ useHistory ๊ธฐ๋Šฅ์„ ์ „๋ถ€ ๋Œ€์ฒด
useHistory๋Š” ๊ฐ์ฒด์˜€์ง€๋งŒ useNavigate๋Š” ํ•จ์ˆ˜์ด๋‹ค.
๊ธฐ์กด์ฝ”๋“œ
const history = useHistory(); history.push('/'); history.goback(); history.go(-2); history.push(`/user/${user._id}`);
๋ฐ”๋€์ฝ”๋“œ
const navigate = useNavigate(); navigate('/'); navigate(-1); navigate(-2); navigate(`/user/${user._id}`);
์ถœ์ฒ˜
React ํ™ˆ์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
React.js
๋ฉ”์ธ์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
์˜์–ด๋ฅผ ์ž˜ํ•˜๋Š” ์‚ฌ๋žŒ์€ ๊ณต์‹ ๋ฌธ์„œ ํ™•์ธ!
Switch ๋Œ€์‹  Routes๋กœ
Switch ๋Œ€์‹  Routes๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.
exact ์˜ต์…˜์ด ์‚ฌ๋ผ์กŒ๋‹ค. ์ด์ œ๋Š” ํ•ญ์ƒ exact ์˜ต์…˜์„ ์ ์šฉ๋ฐ›๋Š”๋‹ค.
Route๋Š” ํ•ญ์ƒ Routes ์ง์†์œผ๋กœ ๋‘˜๋Ÿฌ์Œ“์—ฌ์•ผ ํ•œ๋‹ค.
๊ธฐ์กด์ฝ”๋“œ
<Switch> <Route path="/" ..... /> </Switch>
๋ฐ”๋€์ฝ”๋“œ
<Routes> <Route path="/" ..... /> </Routes>
Route children์ด๋‚˜ component๊ฐ€ ์‚ฌ๋ผ์ง€๊ณ  element์‚ฌ์šฉ
๊ธฐ์กด์ฝ”๋“œ
<Route path="/" exact component={HomePage} /> <Route path="/login" exact> <LoginPage /> </Route>
๋ฐ”๋€์ฝ”๋“œ
<Route path="/" exact element={<HomePage />} /> <Route path="/login" exact element={<LoginPage />} />
์„œ๋ธŒ ๊ฒฝ๋กœ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ *๋ฅผ ์‚ฌ์šฉ
๊ธฐ์กด์ฝ”๋“œ
<Route path="/users/:username" component={UsersPage} />
๋ฐ”๋€์ฝ”๋“œ
<Route path="/users/:username/*" element={<UsersPage />} />
NavLink์— activeStyle, activeClassName ์‚ญ์ œ
๊ธฐ์กด์ฝ”๋“œ
<NavLink to="/messages" style={{ color: "blue"}} activeStyle={{ color: "green"}}> Messages </NavLink> <NavLink to="/messages" className="nav-link" activeClassName="activated"> Messages </NavLink>
๋ฐ”๋€์ฝ”๋“œ
<NavLink to="/messages" style={({ isActive }) => ({ color: isActive ? 'green' : 'blue' })}> Messages </NavLink> <NavLink to="/messages" className={({ isActive }) => "nav-link" + (isActive ? " activated" : "") }> Messages </NavLink>
pathnameย ๊ฐ€์ ธ์™€ styled-components์™€ ๊ฒฐํ•ฉํ•˜๋Š” useLocation
์•„๋ž˜ ์ฝ”๋“œ์™€ ๊ฐ™์ดย useLocationย Hook์„ ์‚ฌ์šฉํ•˜์—ฌ pathname์„ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
import React from "react"; import { Link, useLocation } from "react-router-dom"; import styled from "styled-components"; const HeaderWrapper = styled("header")` margin-bottom: 30px; `; const List = styled("ul")` display: flex; `; const Item = styled("li")` margin-right: 20px; text-transform: uppercase; font-weight: 600; color: ${(props) => (props.selected ? "white" : "black")}; background-color: ${(props) => (props.selected ? "#f1c40f" : "white")}; `; const Header = () => { const { pathname } = useLocation(); return ( <HeaderWrapper> {/* header ํƒœ๊ทธ */} <List> {/* ul ํƒœ๊ทธ */} <Item selected={pathname.startsWith("/web")}> {/* li ํƒœ๊ทธ */} <Link to="/web">Go to Web</Link> </Item> <Item selected={pathname === "/design"}> <Link to="/design">Go to Design</Link> </Item> <Item selected={pathname === "/server"}> <Link to="/server">Go to Server</Link> </Item> </List> </HeaderWrapper> ); }; export default Header;
useParams๋กœ :id path๋ฅผ ์ด์šฉํ•˜๊ธฐ
useParamsย Hook์„ ์ด์šฉํ•˜์—ฌย :idย ๊ฐ’์„ ๋ฐ›์•„์˜ต๋‹ˆ๋‹ค.
// WebPost.js import React from "react"; import { useParams } from "react-router"; const WebPost = () => { const { id } = useParams(); return <div>#{id}๋ฒˆ์งธ ํฌ์ŠคํŠธ</div>; }; export default WebPost;
useHistory ์‚ญ์ œ, useNavigate๋กœ ๋ณ‘ํ•ฉ
useHistory๋กœ ๊ธฐ์กด์˜ useHistory ๊ธฐ๋Šฅ์„ ์ „๋ถ€ ๋Œ€์ฒด
useHistory๋Š” ๊ฐ์ฒด์˜€์ง€๋งŒ useNavigate๋Š” ํ•จ์ˆ˜์ด๋‹ค.
๊ธฐ์กด์ฝ”๋“œ
const history = useHistory(); history.push('/'); history.goback(); history.go(-2); history.push(`/user/${user._id}`);
๋ฐ”๋€์ฝ”๋“œ
const navigate = useNavigate(); navigate('/'); navigate(-1); navigate(-2); navigate(`/user/${user._id}`);
์ถœ์ฒ˜
React ํ™ˆ์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
React.js
๋ฉ”์ธ์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
์˜์–ด๋ฅผ ์ž˜ํ•˜๋Š” ์‚ฌ๋žŒ์€ ๊ณต์‹ ๋ฌธ์„œ ํ™•์ธ!
Switch ๋Œ€์‹  Routes๋กœ
Switch ๋Œ€์‹  Routes๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.
exact ์˜ต์…˜์ด ์‚ฌ๋ผ์กŒ๋‹ค. ์ด์ œ๋Š” ํ•ญ์ƒ exact ์˜ต์…˜์„ ์ ์šฉ๋ฐ›๋Š”๋‹ค.
Route๋Š” ํ•ญ์ƒ Routes ์ง์†์œผ๋กœ ๋‘˜๋Ÿฌ์Œ“์—ฌ์•ผ ํ•œ๋‹ค.
๊ธฐ์กด์ฝ”๋“œ
<Switch> <Route path="/" ..... /> </Switch>
๋ฐ”๋€์ฝ”๋“œ
<Routes> <Route path="/" ..... /> </Routes>
Route children์ด๋‚˜ component๊ฐ€ ์‚ฌ๋ผ์ง€๊ณ  element์‚ฌ์šฉ
๊ธฐ์กด์ฝ”๋“œ
<Route path="/" exact component={HomePage} /> <Route path="/login" exact> <LoginPage /> </Route>
๋ฐ”๋€์ฝ”๋“œ
<Route path="/" exact element={<HomePage />} /> <Route path="/login" exact element={<LoginPage />} />
์„œ๋ธŒ ๊ฒฝ๋กœ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ *๋ฅผ ์‚ฌ์šฉ
๊ธฐ์กด์ฝ”๋“œ
<Route path="/users/:username" component={UsersPage} />
๋ฐ”๋€์ฝ”๋“œ
<Route path="/users/:username/*" element={<UsersPage />} />
NavLink์— activeStyle, activeClassName ์‚ญ์ œ
๊ธฐ์กด์ฝ”๋“œ
<NavLink to="/messages" style={{ color: "blue"}} activeStyle={{ color: "green"}}> Messages </NavLink> <NavLink to="/messages" className="nav-link" activeClassName="activated"> Messages </NavLink>
๋ฐ”๋€์ฝ”๋“œ
<NavLink to="/messages" style={({ isActive }) => ({ color: isActive ? 'green' : 'blue' })}> Messages </NavLink> <NavLink to="/messages" className={({ isActive }) => "nav-link" + (isActive ? " activated" : "") }> Messages </NavLink>
pathnameย ๊ฐ€์ ธ์™€ styled-components์™€ ๊ฒฐํ•ฉํ•˜๋Š” useLocation
์•„๋ž˜ ์ฝ”๋“œ์™€ ๊ฐ™์ดย useLocationย Hook์„ ์‚ฌ์šฉํ•˜์—ฌ pathname์„ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
import React from "react"; import { Link, useLocation } from "react-router-dom"; import styled from "styled-components"; const HeaderWrapper = styled("header")` margin-bottom: 30px; `; const List = styled("ul")` display: flex; `; const Item = styled("li")` margin-right: 20px; text-transform: uppercase; font-weight: 600; color: ${(props) => (props.selected ? "white" : "black")}; background-color: ${(props) => (props.selected ? "#f1c40f" : "white")}; `; const Header = () => { const { pathname } = useLocation(); return ( <HeaderWrapper> {/* header ํƒœ๊ทธ */} <List> {/* ul ํƒœ๊ทธ */} <Item selected={pathname.startsWith("/web")}> {/* li ํƒœ๊ทธ */} <Link to="/web">Go to Web</Link> </Item> <Item selected={pathname === "/design"}> <Link to="/design">Go to Design</Link> </Item> <Item selected={pathname === "/server"}> <Link to="/server">Go to Server</Link> </Item> </List> </HeaderWrapper> ); }; export default Header;
useParams๋กœ :id path๋ฅผ ์ด์šฉํ•˜๊ธฐ
useParamsย Hook์„ ์ด์šฉํ•˜์—ฌย :idย ๊ฐ’์„ ๋ฐ›์•„์˜ต๋‹ˆ๋‹ค.
// WebPost.js import React from "react"; import { useParams } from "react-router"; const WebPost = () => { const { id } = useParams(); return <div>#{id}๋ฒˆ์งธ ํฌ์ŠคํŠธ</div>; }; export default WebPost;
useHistory ์‚ญ์ œ, useNavigate๋กœ ๋ณ‘ํ•ฉ
useHistory๋กœ ๊ธฐ์กด์˜ useHistory ๊ธฐ๋Šฅ์„ ์ „๋ถ€ ๋Œ€์ฒด
useHistory๋Š” ๊ฐ์ฒด์˜€์ง€๋งŒ useNavigate๋Š” ํ•จ์ˆ˜์ด๋‹ค.
๊ธฐ์กด์ฝ”๋“œ
const history = useHistory(); history.push('/'); history.goback(); history.go(-2); history.push(`/user/${user._id}`);
๋ฐ”๋€์ฝ”๋“œ
const navigate = useNavigate(); navigate('/'); navigate(-1); navigate(-2); navigate(`/user/${user._id}`);
์ถœ์ฒ˜
React ํ™ˆ์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
React.js
๋ฉ”์ธ์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
์˜์–ด๋ฅผ ์ž˜ํ•˜๋Š” ์‚ฌ๋žŒ์€ ๊ณต์‹ ๋ฌธ์„œ ํ™•์ธ!
Switch ๋Œ€์‹  Routes๋กœ
Switch ๋Œ€์‹  Routes๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.
exact ์˜ต์…˜์ด ์‚ฌ๋ผ์กŒ๋‹ค. ์ด์ œ๋Š” ํ•ญ์ƒ exact ์˜ต์…˜์„ ์ ์šฉ๋ฐ›๋Š”๋‹ค.
Route๋Š” ํ•ญ์ƒ Routes ์ง์†์œผ๋กœ ๋‘˜๋Ÿฌ์Œ“์—ฌ์•ผ ํ•œ๋‹ค.
๊ธฐ์กด์ฝ”๋“œ
<Switch> <Route path="/" ..... /> </Switch>
๋ฐ”๋€์ฝ”๋“œ
<Routes> <Route path="/" ..... /> </Routes>
Route children์ด๋‚˜ component๊ฐ€ ์‚ฌ๋ผ์ง€๊ณ  element์‚ฌ์šฉ
๊ธฐ์กด์ฝ”๋“œ
<Route path="/" exact component={HomePage} /> <Route path="/login" exact> <LoginPage /> </Route>
๋ฐ”๋€์ฝ”๋“œ
<Route path="/" exact element={<HomePage />} /> <Route path="/login" exact element={<LoginPage />} />
์„œ๋ธŒ ๊ฒฝ๋กœ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ *๋ฅผ ์‚ฌ์šฉ
๊ธฐ์กด์ฝ”๋“œ
<Route path="/users/:username" component={UsersPage} />
๋ฐ”๋€์ฝ”๋“œ
<Route path="/users/:username/*" element={<UsersPage />} />
NavLink์— activeStyle, activeClassName ์‚ญ์ œ
๊ธฐ์กด์ฝ”๋“œ
<NavLink to="/messages" style={{ color: "blue"}} activeStyle={{ color: "green"}}> Messages </NavLink> <NavLink to="/messages" className="nav-link" activeClassName="activated"> Messages </NavLink>
๋ฐ”๋€์ฝ”๋“œ
<NavLink to="/messages" style={({ isActive }) => ({ color: isActive ? 'green' : 'blue' })}> Messages </NavLink> <NavLink to="/messages" className={({ isActive }) => "nav-link" + (isActive ? " activated" : "") }> Messages </NavLink>
pathnameย ๊ฐ€์ ธ์™€ styled-components์™€ ๊ฒฐํ•ฉํ•˜๋Š” useLocation
์•„๋ž˜ ์ฝ”๋“œ์™€ ๊ฐ™์ดย useLocationย Hook์„ ์‚ฌ์šฉํ•˜์—ฌ pathname์„ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
import React from "react"; import { Link, useLocation } from "react-router-dom"; import styled from "styled-components"; const HeaderWrapper = styled("header")` margin-bottom: 30px; `; const List = styled("ul")` display: flex; `; const Item = styled("li")` margin-right: 20px; text-transform: uppercase; font-weight: 600; color: ${(props) => (props.selected ? "white" : "black")}; background-color: ${(props) => (props.selected ? "#f1c40f" : "white")}; `; const Header = () => { const { pathname } = useLocation(); return ( <HeaderWrapper> {/* header ํƒœ๊ทธ */} <List> {/* ul ํƒœ๊ทธ */} <Item selected={pathname.startsWith("/web")}> {/* li ํƒœ๊ทธ */} <Link to="/web">Go to Web</Link> </Item> <Item selected={pathname === "/design"}> <Link to="/design">Go to Design</Link> </Item> <Item selected={pathname === "/server"}> <Link to="/server">Go to Server</Link> </Item> </List> </HeaderWrapper> ); }; export default Header;
useParams๋กœ :id path๋ฅผ ์ด์šฉํ•˜๊ธฐ
useParamsย Hook์„ ์ด์šฉํ•˜์—ฌย :idย ๊ฐ’์„ ๋ฐ›์•„์˜ต๋‹ˆ๋‹ค.
// WebPost.js import React from "react"; import { useParams } from "react-router"; const WebPost = () => { const { id } = useParams(); return <div>#{id}๋ฒˆ์งธ ํฌ์ŠคํŠธ</div>; }; export default WebPost;
useHistory ์‚ญ์ œ, useNavigate๋กœ ๋ณ‘ํ•ฉ
useHistory๋กœ ๊ธฐ์กด์˜ useHistory ๊ธฐ๋Šฅ์„ ์ „๋ถ€ ๋Œ€์ฒด
useHistory๋Š” ๊ฐ์ฒด์˜€์ง€๋งŒ useNavigate๋Š” ํ•จ์ˆ˜์ด๋‹ค.
๊ธฐ์กด์ฝ”๋“œ
const history = useHistory(); history.push('/'); history.goback(); history.go(-2); history.push(`/user/${user._id}`);
๋ฐ”๋€์ฝ”๋“œ
const navigate = useNavigate(); navigate('/'); navigate(-1); navigate(-2); navigate(`/user/${user._id}`);
์ถœ์ฒ˜
React ํ™ˆ์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
React.js
๋ฉ”์ธ์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
์˜์–ด๋ฅผ ์ž˜ํ•˜๋Š” ์‚ฌ๋žŒ์€ ๊ณต์‹ ๋ฌธ์„œ ํ™•์ธ!
Switch ๋Œ€์‹  Routes๋กœ
Switch ๋Œ€์‹  Routes๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.
exact ์˜ต์…˜์ด ์‚ฌ๋ผ์กŒ๋‹ค. ์ด์ œ๋Š” ํ•ญ์ƒ exact ์˜ต์…˜์„ ์ ์šฉ๋ฐ›๋Š”๋‹ค.
Route๋Š” ํ•ญ์ƒ Routes ์ง์†์œผ๋กœ ๋‘˜๋Ÿฌ์Œ“์—ฌ์•ผ ํ•œ๋‹ค.
๊ธฐ์กด์ฝ”๋“œ
<Switch> <Route path="/" ..... /> </Switch>
๋ฐ”๋€์ฝ”๋“œ
<Routes> <Route path="/" ..... /> </Routes>
Route children์ด๋‚˜ component๊ฐ€ ์‚ฌ๋ผ์ง€๊ณ  element์‚ฌ์šฉ
๊ธฐ์กด์ฝ”๋“œ
<Route path="/" exact component={HomePage} /> <Route path="/login" exact> <LoginPage /> </Route>
๋ฐ”๋€์ฝ”๋“œ
<Route path="/" exact element={<HomePage />} /> <Route path="/login" exact element={<LoginPage />} />
์„œ๋ธŒ ๊ฒฝ๋กœ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ *๋ฅผ ์‚ฌ์šฉ
๊ธฐ์กด์ฝ”๋“œ
<Route path="/users/:username" component={UsersPage} />
๋ฐ”๋€์ฝ”๋“œ
<Route path="/users/:username/*" element={<UsersPage />} />
NavLink์— activeStyle, activeClassName ์‚ญ์ œ
๊ธฐ์กด์ฝ”๋“œ
<NavLink to="/messages" style={{ color: "blue"}} activeStyle={{ color: "green"}}> Messages </NavLink> <NavLink to="/messages" className="nav-link" activeClassName="activated"> Messages </NavLink>
๋ฐ”๋€์ฝ”๋“œ
<NavLink to="/messages" style={({ isActive }) => ({ color: isActive ? 'green' : 'blue' })}> Messages </NavLink> <NavLink to="/messages" className={({ isActive }) => "nav-link" + (isActive ? " activated" : "") }> Messages </NavLink>
pathnameย ๊ฐ€์ ธ์™€ styled-components์™€ ๊ฒฐํ•ฉํ•˜๋Š” useLocation
์•„๋ž˜ ์ฝ”๋“œ์™€ ๊ฐ™์ดย useLocationย Hook์„ ์‚ฌ์šฉํ•˜์—ฌ pathname์„ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
import React from "react"; import { Link, useLocation } from "react-router-dom"; import styled from "styled-components"; const HeaderWrapper = styled("header")` margin-bottom: 30px; `; const List = styled("ul")` display: flex; `; const Item = styled("li")` margin-right: 20px; text-transform: uppercase; font-weight: 600; color: ${(props) => (props.selected ? "white" : "black")}; background-color: ${(props) => (props.selected ? "#f1c40f" : "white")}; `; const Header = () => { const { pathname } = useLocation(); return ( <HeaderWrapper> {/* header ํƒœ๊ทธ */} <List> {/* ul ํƒœ๊ทธ */} <Item selected={pathname.startsWith("/web")}> {/* li ํƒœ๊ทธ */} <Link to="/web">Go to Web</Link> </Item> <Item selected={pathname === "/design"}> <Link to="/design">Go to Design</Link> </Item> <Item selected={pathname === "/server"}> <Link to="/server">Go to Server</Link> </Item> </List> </HeaderWrapper> ); }; export default Header;
useParams๋กœ :id path๋ฅผ ์ด์šฉํ•˜๊ธฐ
useParamsย Hook์„ ์ด์šฉํ•˜์—ฌย :idย ๊ฐ’์„ ๋ฐ›์•„์˜ต๋‹ˆ๋‹ค.
// WebPost.js import React from "react"; import { useParams } from "react-router"; const WebPost = () => { const { id } = useParams(); return <div>#{id}๋ฒˆ์งธ ํฌ์ŠคํŠธ</div>; }; export default WebPost;
useHistory ์‚ญ์ œ, useNavigate๋กœ ๋ณ‘ํ•ฉ
useHistory๋กœ ๊ธฐ์กด์˜ useHistory ๊ธฐ๋Šฅ์„ ์ „๋ถ€ ๋Œ€์ฒด
useHistory๋Š” ๊ฐ์ฒด์˜€์ง€๋งŒ useNavigate๋Š” ํ•จ์ˆ˜์ด๋‹ค.
๊ธฐ์กด์ฝ”๋“œ
const history = useHistory(); history.push('/'); history.goback(); history.go(-2); history.push(`/user/${user._id}`);
๋ฐ”๋€์ฝ”๋“œ
const navigate = useNavigate(); navigate('/'); navigate(-1); navigate(-2); navigate(`/user/${user._id}`);
์ถœ์ฒ˜
React ํ™ˆ์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
React.js
๋ฉ”์ธ์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
์˜์–ด๋ฅผ ์ž˜ํ•˜๋Š” ์‚ฌ๋žŒ์€ ๊ณต์‹ ๋ฌธ์„œ ํ™•์ธ!
Switch ๋Œ€์‹  Routes๋กœ
Switch ๋Œ€์‹  Routes๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.
exact ์˜ต์…˜์ด ์‚ฌ๋ผ์กŒ๋‹ค. ์ด์ œ๋Š” ํ•ญ์ƒ exact ์˜ต์…˜์„ ์ ์šฉ๋ฐ›๋Š”๋‹ค.
Route๋Š” ํ•ญ์ƒ Routes ์ง์†์œผ๋กœ ๋‘˜๋Ÿฌ์Œ“์—ฌ์•ผ ํ•œ๋‹ค.
๊ธฐ์กด์ฝ”๋“œ
<Switch> <Route path="/" ..... /> </Switch>
๋ฐ”๋€์ฝ”๋“œ
<Routes> <Route path="/" ..... /> </Routes>
Route children์ด๋‚˜ component๊ฐ€ ์‚ฌ๋ผ์ง€๊ณ  element์‚ฌ์šฉ
๊ธฐ์กด์ฝ”๋“œ
<Route path="/" exact component={HomePage} /> <Route path="/login" exact> <LoginPage /> </Route>
๋ฐ”๋€์ฝ”๋“œ
<Route path="/" exact element={<HomePage />} /> <Route path="/login" exact element={<LoginPage />} />
์„œ๋ธŒ ๊ฒฝ๋กœ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ *๋ฅผ ์‚ฌ์šฉ
๊ธฐ์กด์ฝ”๋“œ
<Route path="/users/:username" component={UsersPage} />
๋ฐ”๋€์ฝ”๋“œ
<Route path="/users/:username/*" element={<UsersPage />} />
NavLink์— activeStyle, activeClassName ์‚ญ์ œ
๊ธฐ์กด์ฝ”๋“œ