【发布时间】:2021-11-21 06:36:05
【问题描述】:
我在从 useLocation() 挂钩访问位置时收到此错误消息。实际上我正在尝试将谷歌分析添加到我的反应应用程序中,但我收到了这个错误消息。
Uncaught TypeError: Cannot read properties of undefined (reading 'location')
使用GaTracker挂钩代码:
import { useEffect, useState } from "react"
import { useLocation } from "react-router-dom"
import ReactGA from "react-ga"
const useGaTracker = () => {
const location = useLocation()
const [initialized, setInitialized] = useState(false)
console.log(location)
useEffect(() => {
if (!window.location.href.includes("localhost")) {
ReactGA.initialize(process.env.REACT_APP_GOOGLE_ANALYTICS_KEY)
setInitialized(true)
}
}, [])
useEffect(() => {
if (initialized) {
ReactGA.pageview(location.pathname + location.search)
}
}, [initialized, location])
}
export default useGaTracker
App.js 代码
import React, { Suspense } from "react"
import { BrowserRouter, Switch, Route } from "react-router-dom"
import "./App.css"
import { Helmet } from "react-helmet"
import { AuthProvider } from "./context/AuthContext"
// custom components
import SideBar from "./components/layouts/SideBar"
import Navbar from "./components/layouts/Navbar"
import Footer from "./components/layouts/Footer"
import useGaTracker from "./hooks/useGaTracker"
// lazy loading components
const Dashboard = React.lazy(() => import("./components/dashboard/Dashboard"))
const App = () => {
useGaTracker()
return (
<BrowserRouter>
<Helmet>
<title>CODINGSPACE - Learn by Building Web and Mobile Apps</title>
</Helmet>
<AuthProvider>
<div className="relative grid min-h-screen md:grid-cols-layout-tablet xl:grid-cols-layout-desktop grid-rows-layout-desktop md:gap-6">
<Navbar />
<SideBar />
<Switch>
<Suspense fallback={<div>Loading..</div>}>
<Route exact path="/" component={Dashboard} />
</Suspense>
</Switch>
<Feedback />
<Footer />
</div>
</AuthProvider>
</BrowserRouter>
)
}
export default App
【问题讨论】:
-
在
BrowserRouter组件中使用这个钩子的唯一方法是在此之前。在您的情况下,它应该用于AppProvider
标签: reactjs google-analytics react-router-dom