错误消息“未捕获类型错误:无法解构‘React2.useContext(...)’的属性‘basename’,因为它为空”

Sub*_*egi 59 three.js reactjs tailwind-css

我面临着

未捕获的类型错误:无法解构“React2.useContext(...)”的属性“basename”,因为它为空。

Link代码的组件中:

import React, { useEffect, useState } from 'react';
import { Link } from 'react-router-dom';

import { styles } from '../styles';
import { navLinks } from '../constansts';
import { logo, menu, close } from '../assets';

const Navbar = () => {
  const [active, setActive] = useState('');
  return (
    <nav className={`${styles.paddingX} w-full flex items-center py-5 fixed top-0 z-20     bg-primary`}>
      <div className="w-full flex justify-between items-center max-w-7x1 max-auto">
        <Link
          to="/"
          className="flex items-center gap-2"
          onClick={() => {
            setActive('');
            window.scrollTo(0, 0);
          }}
        >
          <img alt="logo" />
        </Link>
      </div>
    </nav>
  );
};

export default Navbar;
Run Code Online (Sandbox Code Playgroud)

我该如何修复它?

Art*_*hur 141

您正在使用Linkfrom react-router-dom,它正在调用useContext。它正在寻找的上下文是由 提供的BrowserRouter,但您的应用程序不是由 BrowserRouter. 你的index.js

import { BrowserRouter } from 'react-router-dom'

render(
  <BrowserRouter>
    <App />
  </BrowserRouter>,
  document.getElementById('root')
)
Run Code Online (Sandbox Code Playgroud)

  • @JuniorMayhé这是因为react-router-dom `Link`实现正在调用`useContext`并且它正在寻找的上下文是由`BrowserRouter`提供的 (4认同)

小智 6

确保在App.js中正确使用路由并将导航栏组件放入 BrowserRouter 中。作为示例,我们假设您的app.js类似于:

function App() {
  return (
  <div className="App">
    
    <Router>
      <Routes>
        <Route path="/" element={<HomePage/>}/>
        <Route path="/x" element={<x/>}/>
        <Route path="/y" element={<y/>}/>
        <Route path="/z" element={<z/>}/>
        <Route path="/*" element={<NotFound/>}/>
      </Routes>
    </Router>
  </div>);
}

export default App;
Run Code Online (Sandbox Code Playgroud)

然后:

 function App() {
  return (
  <div className="App">
    
    <Router>
      <Routes>
        <NavBar/>
        <Route path="/" element={<HomePage/>}/>
        <Route path="/x" element={<x/>}/>
        <Route path="/y" element={<y/>}/>
        <Route path="/z" element={<z/>}/>
        <Route path="/*" element={<NotFound/>}/>
      </Routes>
    </Router>
  </div>);
}

export default App;
Run Code Online (Sandbox Code Playgroud)

请务必添加导入!

在包装路由之前,我将 BrowserRouter 导入为 Router,因为它可以帮助我理解代码。这就是为什么它是这样声明的。


归档时间:

查看次数:

130095 次

最近记录:

1 年,9 月 前