๐ค ์ค๋์ ์๋ฌ
React๋ก ์ฝ๋๋ฅผ ์ง๋ ์ค, ์ค๋์ ์๋์ ๊ฐ์ ์๋ฌ๋ฅผ ๋ง๋ฌ๋ค.
TypeError: Cannot read properties of undefined (reading 'pathname')
ํด๋น ์๋ฌ์ ๋ํ GPT์ ๋ต์ ์๋์ ๊ฐ์๋ค.
์ด ์๋ฌ๋ React ์ ํ๋ฆฌ์ผ์ด์ ์์ 'pathname' ์์ฑ์ ๊ฐ๋ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ค๊ณ ํ ๋ ํด๋น ๊ฐ์ฒด๊ฐ ์ ์๋์ง ์์ ๊ฒฝ์ฐ ๋ฐ์ํฉ๋๋ค. 'pathname'์ ์ผ๋ฐ์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ์ URL ๊ฒฝ๋ก๋ฅผ ๋ํ๋ด๋ ์์ฑ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด ์๋ฌ๋ ๋ค์๊ณผ ๊ฐ์ ์ํฉ์์ ๋ฐ์ํ ์ ์์ต๋๋ค:
1. ๋ธ๋ผ์ฐ์ ๋ผ์ฐํฐ ์ค๋ฅ: React Router ๋๋ ๋ค๋ฅธ ๋ผ์ฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ๋ธ๋ผ์ฐ์ ๋ผ์ฐํฐ๊ฐ ์ด๊ธฐํ๋์ง ์์๊ฑฐ๋ ์๋ชป ๊ตฌ์ฑ๋์ด 'pathname' ์์ฑ์ด ์ ์๋์ง ์์ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ, ๋ผ์ฐํฐ ์ค์ ์ ํ์ธํ๊ณ ์ด๊ธฐํ๋์๋์ง, ์ ํํ ๊ฒฝ๋ก ๋ฐ ๋ผ์ฐํธ ๊ตฌ์ฑ์ ์ฌ์ฉํ๋์ง ํ์ธํด์ผ ํฉ๋๋ค.
2. ์ปดํฌ๋ํธ ์๋ช ์ฃผ๊ธฐ ๋ฌธ์ : React ์ปดํฌ๋ํธ์ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ ํน์ ์ด๋ฒคํธ ํธ๋ค๋ฌ์์ 'pathname' ์์ฑ์ ์ฌ์ฉํ๊ณ ์์ ๋, ํด๋น ์์ฑ์ด ์์ง ์ ์๋์ง ์์์ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ, ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ ๋๊ธฐ ์ ์ ๋๋ ํด๋น ์์ฑ์ด ์์๋๋ก ์ค์ ๋์ง ์์์ ๋ ํด๋น ์ฝ๋๋ฅผ ์์ ํด์ผ ํฉ๋๋ค.
3. ๋น๋๊ธฐ ๋ฐ์ดํฐ ๋ก๋ฉ ๋ฌธ์ : ๋น๋๊ธฐ ์์ (์: ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ)์ ์ํํ๋ ๋์ 'pathname' ์์ฑ์ ์ฐธ์กฐํ๊ณ ์ ํ ๋, ํด๋น ์์ ์ด ์์ง ์๋ฃ๋์ง ์์ 'pathname'์ด ์ ์๋์ง ์์ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ, ๋ฐ์ดํฐ ๋ก๋ฉ์ด ์๋ฃ๋ ํ์ ํด๋น ์์ฑ์ ์ฐธ์กฐํ๋๋ก ์ฝ๋๋ฅผ ์์ ํด์ผ ํฉ๋๋ค.
๐ง ์ฒ์ ์์ฑํ ์ฝ๋
์ฒ์์๋ Routes์ Route๋ค์ 'Router'๋ก ๋ฌถ์ด ์ฃผ์๋ค. ์ด ๋ถ๋ถ์ด ์์ธ์ด์๋ค.
// App.js
import './App.css';
import { Route, Router, Routes } from "react-router-dom"; // *์ฌ๊ธฐ๋ฅผ ์์ ํด์ผ ํจ
import BookmarkPage from "../src/pages/Bookmark-page";
import Footer from "../src/components/Footer";
import Header from "../src/components/Header";
import MainPage from "../src/pages/Main-page";
import ProductListPage from "../src/pages/ProductList-page";
import React from "react";
function App() {
return (
<Router> {/* ์ฌ๊ธฐ๋ฅผ ์์ ํด์ผ ํจ */}
<div>
<Header/>
<Routes>
<Route path="/" element={<MainPage/>}/>
<Route path="/products" element={<BookmarkPage/>}/>
<Route path="/bookmark" element={<ProductListPage/>}/>
</Routes>
<Footer/>
</div>
</Router>
);
}
export default App;
๐ก ํด๊ฒฐ ๋ฐฉ๋ฒ
1. App.js์ ๋ค ๋๋ ค๋ฐ๊ธฐ
App.js ํ์ผ์ BrowserRouter, Route, Routes๋ฅผ ๋ชจ๋ import ํ๋ค. ๊ทธ๋ฆฌ๊ณ Route๋ฅผ Routes๋ก ๋ฌถ์ด์ฃผ๊ณ , ์ด ๋์ ๋ชจ๋ BrowserRouter๋ก ๋ฌถ์ด์ค๋ค.
// App.js
import './App.css';
import { BrowserRouter, Route, Routes } from "react-router-dom"; // *BrowserRouter๋ฅผ import
import BookmarkPage from "../src/pages/Bookmark-page";
import Footer from "../src/components/Footer";
import Header from "../src/components/Header";
import MainPage from "../src/pages/Main-page";
import ProductListPage from "../src/pages/ProductList-page";
import React from "react";
function App() {
return (
<BrowserRouter>
<div>
<Header/>
<Routes>
<Route path="/" element={<MainPage/>}/>
<Route path="/products" element={<BookmarkPage/>}/>
<Route path="/bookmark" element={<ProductListPage/>}/>
</Routes>
<Footer/>
</div>
</BrowserRouter>
);
}
export default App;
2. index.js์ App.js๋ฅผ import ํ๊ธฐ
๋๋ App.js์๋ Route์ Routes๋ง import ํด์ฃผ๋ ๋ฐฉ๋ฒ๋ ์๋ค. ์ด๋, BrowserRouter๋ index.js์ import ๋ฐ jsx์์ ์ฌ์ฉ, App ์ปดํฌ๋ํธ ๋ํ index.js์ import ๋ฐ jsx์์ ์ฌ์ฉํด ์ค๋ค.
// App.js
import './App.css';
import { Route, Routes } from "react-router-dom"; // *Route์ Routes๋ง import
import BookmarkPage from "../src/pages/Bookmark-page";
import Footer from "../src/components/Footer";
import Header from "../src/components/Header";
import MainPage from "../src/pages/Main-page";
import ProductListPage from "../src/pages/ProductList-page";
import React from "react";
// ์ฌ๊ธฐ์๋ ๋ฑํ BrowserRouter๋ฅผ ์ฐ์ง ์์
function App() {
return (
<div>
<Header/>
<Routes>
<Route path="/" element={<MainPage/>}/>
<Route path="/products" element={<BookmarkPage/>}/>
<Route path="/bookmark" element={<ProductListPage/>}/>
</Routes>
<Footer/>
</div>
);
}
export default App;
// index.js
import './index.css';
import App from './App'; // *App.js๋ฅผ import
import { BrowserRouter } from 'react-router-dom'; // *BrowserRouter import
import React from 'react';
import ReactDOM from 'react-dom/client';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<React.StrictMode>
<BrowserRouter>
<App /> {/* importํ App ์ปดํฌ๋ํธ๋ฅผ jsx์์ ์ฌ์ฉ */}
</BrowserRouter>
</React.StrictMode>
);
๐ Today I learned
ํ์, ๋ถ๋ช ๋ผ์ฐํฐ ๊ฐ๋ ์ ๋ํด ์์งํ๋ค๊ณ ์๊ฐํ๋๋ฐ ์๋์๋ค. ๋น์ฐํ ์๊ณ ์๋ค๊ณ ์๊ฐํ ๋ถ๋ถ๋ ํ๋ฆฌ๊ธฐ ๋ง๋ จ์ด๋ค. ์ด ์๋ฌ ํด๊ฒฐ ์ฝ์ง ๋ ธํธ๋ ์ค๋ต ๋ ธํธ๋ผ ์๊ฐํ๊ณ , ์์ผ๋ก๋ ๊ฐ์ ์ค์๋ฅผ ํ์ง ์๊ฒ ๋ค๋ ๋ค์ง์ ํ๋ค.
'๐ ์ฝ์ง ๋ ธํธ > ์๋ฌ ํด๊ฒฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
gitignore์ node_modules๋ฅผ ์ถ๊ฐํ๋๋ฐ๋ Changes๋ชฉ๋ก์ ๋จ๋ ์ด์ (2) | 2023.06.12 |
---|---|
Proxy ์ค์ ์ ์๋ฒ๊ฐ ์ ๊ณตํ๋ ์ฌ๋ฐ๋ฅธ ์๋ํฌ์ธํธ๋ก API๋ฅผ ์์ฒญํ์ (2) | 2023.06.11 |
<h>์ ๋ฒํผ ์์ฑ์ ๋ถ์ฌํ๋ฉด .. (0) | 2023.05.22 |
ํธ์๊ฐ ์๋ ๋, ์ผ๋จ 'stash'๋ก ์จ๊ธฐ์ (0) | 2023.03.31 |
์ปค๋ฐ์ด ์๋๋ ์ด์ ๋ ๊ถํ ๋๋ฌธ์ผ ์๋ ์๋ค. (0) | 2023.03.04 |
๋๊ธ