应用程序 useEffect 不使用 React 路由器触发
App useEffect not firing with react router
我正在尝试向我的应用程序添加一些分析。在顶层(在 App.js 内)我有一个相当简单的布局——一个导航栏、一个插座(用于反应路由器)和一个页脚。在页面中导航时,outlet 会更新以显示我的内容——这不应该调用 componentDidUpdate 方法吗?我只在第一次渲染后看到我的 useEffect 挂钩。
如果这按预期运行,是否有更好的位置来放置将在用户浏览页面时调用的挂钩?
app.js的(部分)内容:
function App() {
useEffect(() => {
console.log(window.location.pathname)
})
return (
<div className="App">
<ThemeProvider theme={theme}>
<Navbar />
<Outlet />
<Footer />
</ThemeProvider>
</div>
);
}
index.js:
ReactDOM.render(
<React.StrictMode>
<SimpleReactLightbox>
<BrowserRouter>
<Routes>
<Route path="/" element={<App />}>
<Route path="/" element={<Landing />} />
<Route path="/portfolio" element={<PortfolioGrid />} />
<Route path="/portfolio" element={<Portfolio />}>
<Route path=":portfolioId" element={<Portfolio />} />
</Route>
<Route path="/aboutme" element={<AboutMe />} />
<Route path="/downloads" element={<Downloads />}>
<Route index element={<DefaultDownload />} />
<Route path=":downloadId" element={<MyDownloads />} />
</Route>
</Route>
</Routes>
</BrowserRouter>
</SimpleReactLightbox>
</React.StrictMode>,
document.getElementById('root')
);
我不知道为什么不使用依赖项并记录 window.location
对象不起作用,但使用当前匹配的 location
对象似乎起作用。使用 useLocation
挂钩并添加 location
作为 useEffect
挂钩的依赖项。
示例:
import { Outlet, useLocation } from "react-router-dom";
function App() {
const location = useLocation();
useEffect(() => {
console.log(location.pathname);
}, [location]);
return (
<div className="App">
<ThemeProvider theme={theme}>
<Navbar />
<Outlet />
<Footer />
</ThemeProvider>
</div>
);
}
我正在尝试向我的应用程序添加一些分析。在顶层(在 App.js 内)我有一个相当简单的布局——一个导航栏、一个插座(用于反应路由器)和一个页脚。在页面中导航时,outlet 会更新以显示我的内容——这不应该调用 componentDidUpdate 方法吗?我只在第一次渲染后看到我的 useEffect 挂钩。
如果这按预期运行,是否有更好的位置来放置将在用户浏览页面时调用的挂钩?
app.js的(部分)内容:
function App() {
useEffect(() => {
console.log(window.location.pathname)
})
return (
<div className="App">
<ThemeProvider theme={theme}>
<Navbar />
<Outlet />
<Footer />
</ThemeProvider>
</div>
);
}
index.js:
ReactDOM.render(
<React.StrictMode>
<SimpleReactLightbox>
<BrowserRouter>
<Routes>
<Route path="/" element={<App />}>
<Route path="/" element={<Landing />} />
<Route path="/portfolio" element={<PortfolioGrid />} />
<Route path="/portfolio" element={<Portfolio />}>
<Route path=":portfolioId" element={<Portfolio />} />
</Route>
<Route path="/aboutme" element={<AboutMe />} />
<Route path="/downloads" element={<Downloads />}>
<Route index element={<DefaultDownload />} />
<Route path=":downloadId" element={<MyDownloads />} />
</Route>
</Route>
</Routes>
</BrowserRouter>
</SimpleReactLightbox>
</React.StrictMode>,
document.getElementById('root')
);
我不知道为什么不使用依赖项并记录 window.location
对象不起作用,但使用当前匹配的 location
对象似乎起作用。使用 useLocation
挂钩并添加 location
作为 useEffect
挂钩的依赖项。
示例:
import { Outlet, useLocation } from "react-router-dom";
function App() {
const location = useLocation();
useEffect(() => {
console.log(location.pathname);
}, [location]);
return (
<div className="App">
<ThemeProvider theme={theme}>
<Navbar />
<Outlet />
<Footer />
</ThemeProvider>
</div>
);
}