开发者问题收集

未捕获的类型错误:对象 null 不可迭代(无法读取属性 Symbol(Symbol.iterator))

2022-03-02
8365

错误是

未捕获的 TypeError:对象 null 不可迭代(无法读取属性 Symbol(Symbol.iterator))

import React from 'react';
import { NavigationBar } from './components/header/Navbar';
import {Outlet} from "react-router-dom"


export default function App(){
  const [account, setAccount] = React.useState<string>('')
  return (
    <div className="App">
      <NavigationBar />
        <Outlet context={[account, setAccount]}/>
    </div>
  );
}

我在行 const {account, setAccount} = useOutletContext(); 上收到错误 以下是需要 account 和 setAccount 的代码片段。

import { useOutletContext } from "react-router-dom";
const NavigationBar:React.FC = () => {
    const [account, setAccount] = useOutletContext();
    // rest of the code
}
1个回答

您正在使用 useOutletContext 作为对象,但它是一个数组。因此,在这种情况下, { 应该是 []

将其更改为

const [account, setAccount] = useOutletContext();

文档: https://reactrouter.com/docs/en/v6/api#useoutletcontext


现在您收到 Symbol.iterator 错误:您应该在父路由上设置上下文并在内部路由上使用上下文。在您当前的代码中,您正在同一级别上设置和使用它。

请参阅此 codesandbox 以获取工作示例: https://codesandbox.io/s/useoutletcontext-eg1fxb

以下是来自沙盒的代码,供完整参考

import React from "react";
import { Outlet, Routes, Route, BrowserRouter } from "react-router-dom";
import { useOutletContext } from "react-router-dom";

const Dashboard = () => {
  const [account, setAccount] = React.useState("ACCOUNT-NAME");
  return (
    <div className="App">
      <h1>Outer route</h1>
      <Outlet context={[account, setAccount]} />
    </div>
  );
};

const DashboardInner = () => {
  const [account, setAccount] = useOutletContext();
  return <div>Account: {account}</div>;
};

export default function App() {
  return (
    <BrowserRouter>
      <Routes>
        <Route path="/" element={<Dashboard />}>
          <Route path="/" element={<DashboardInner />} />
        </Route>
      </Routes>
    </BrowserRouter>
  );
}

Jap Mul
2022-03-02