首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >React抛出一个react路由器``useLocation()‘错误

React抛出一个react路由器``useLocation()‘错误
EN

Stack Overflow用户
提问于 2022-12-01 15:34:18
回答 1查看 34关注 0票数 0

我已经创建了一个在童话书中工作的组件,它已经被发布到一个私人回购中。当我使用这个使用<navLink>的导航组件时,我会得到一个Uncaught Error: useLocation() may be used only in the context of a <Router> component。我一直在寻找这个,并一直得到同样的答案。这就是在<BrowserRouter>标签中扭曲应用程序。然而,我的应用程序被包装在一个<BrowserRouter>标签中,我仍然会收到这个错误。任何帮助都是受欢迎的,因为我正在把我的头从屏幕上敲下来。

索引文件

代码语言:javascript
运行
复制
import React from 'react';
import { BrowserRouter } from 'react-router-dom';
import ReactDOM from 'react-dom/client';
import App from './components/Container/App';
import store from './app/store';
import { Provider } from 'react-redux';

const root = ReactDOM.createRoot(document.getElementById('root') || new DocumentFragment());
root.render(
  <React.StrictMode>
    <Provider store={store}>
      <BrowserRouter>
        <App />
      </BrowserRouter>
    </Provider>
  </React.StrictMode>
);

App文件

代码语言:javascript
运行
复制
import React from 'react';
import { Routes, Route } from 'react-router-dom';
import PageLayout from '../UI/PageLayout/PageLayout';
import Home from '../Home/Home';
import Portal from '../Portal/Portal';
import ProductSearch from '../ProductSearch/ProductSearch';
import { InternalRoutes } from '../../common/enums/internal-routes';
import Inbox from '../Inbox/Inbox';

const App = () => {
  return (
    <PageLayout >
      <Routes>
        <Route path={InternalRoutes.Default} element={<Home />} />
        <Route path={InternalRoutes.Home} element={<Home />} />
        <Route path={InternalRoutes.Inbox} element={<Inbox />} />
        <Route path={InternalRoutes.Portal} element={<Portal />} />
        <Route path={InternalRoutes.ProductSearch} element={<ProductSearch />} />
      </Routes>             
    </PageLayout>
  );
};

export default App;

PageLayout文件

代码语言:javascript
运行
复制
import React, { FC, ReactNode } from 'react';
import { Logo, PrimaryNavigation } from 'my-component-lib';
import { InternalRoutes as Routes } from '../../../common/enums/internal-routes';

interface I_PageLayoutProps {
  children: ReactNode;
}

const PageLayout:FC<I_PageLayoutProps> = ({children}) => {
  return (
    <div className="body_grid">
      <header>
        <Logo />
        <PrimaryNavigation navigationLinks={Object.values(Routes) as unknown as Array<keyof typeof Routes>} />
      </header>
      <div className={'main_Grid'} >{children}</div>
    </div>
  );
};

export default PageLayout;
EN

回答 1

Stack Overflow用户

发布于 2022-12-01 15:45:15

您可以通过Index文件中删除 <BrowserRouter>并在App文件中包装 <Routes>标记来解决这个问题。

新指数

代码语言:javascript
运行
复制
   import React from 'react';
    import ReactDOM from 'react-dom/client';
    import App from './components/Container/App';
    import store from './app/store';
    import { Provider } from 'react-redux';

    const root = ReactDOM.createRoot(document.getElementById('root') || new DocumentFragment());
    root.render(
        <React.StrictMode>
            <Provider store={store}>
                    <App />
            </Provider>
        </React.StrictMode>
    );

新应用程序文件

代码语言:javascript
运行
复制
import React from 'react';
import { Routes, Route,BrowserRouter  } from 'react-router-dom';
import PageLayout from '../UI/PageLayout/PageLayout';
import Home from '../Home/Home';
import Portal from '../Portal/Portal';
import ProductSearch from '../ProductSearch/ProductSearch';
import { InternalRoutes } from '../../common/enums/internal-routes';
import Inbox from '../Inbox/Inbox';

const App = () => {

    return (
        <PageLayout >
          <BrowserRouter>
            <Routes>
                <Route path={InternalRoutes.Default} element={<Home />} />
                <Route path={InternalRoutes.Home} element={<Home />} />
                <Route path={InternalRoutes.Inbox} element={<Inbox />} />
                <Route path={InternalRoutes.Portal} element={<Portal />} />
                <Route path={InternalRoutes.ProductSearch} element={<ProductSearch />} />
            </Routes> 
           </BrowserRouter>              
        </PageLayout>
    );
};

export default App;

我希望这能解决问题

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74644415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档