查看Hooks 规则以了解它们的限制以及它们的用途。
不要在循环、条件或嵌套函数中调用 Hook。相反,请始终在 React 函数的顶层使用 Hooks。通过遵循此规则,您可以确保每次渲染组件时都以相同的顺序调用 Hook。
与其他答案和评论不同,导入 React 并返回 JSX并不是将函数视为组件的要求。
从概念上讲,组件就像 JavaScript 函数。它们接受任意输入(称为“道具”)并返回描述应该出现在屏幕上的 React 元素。
React 组件的最低要求:
返回一个 React元素1,它可以是任何可以渲染的东西:数字、字符串、其他元素或任何这些元素的数组。
请注意,布尔值和null
被忽略。严格返回undefined
(或不返回,相同)会失败。
那么它必须被用作一个组件:<MyComponent />
或者React.createElement(MyComponent)
在渲染阶段。
您没有将Routes
其用作 React 组件,而是在渲染阶段之外将其作为函数调用。
import Cookies from 'js-cookie';
import { Routes } from 'routes.js'
import { Redirect } from 'react-router-dom';
const routes = Routes(); // <-- Called as a function, not a component
这就是您收到错误的原因。
当您在函数useEffect
内部的正确位置调用时Routes
,由于它不是在 React 的渲染流程中调用的,因此 React 会检测它,就好像它在函数组件之外一样。
话虽如此,由于您没有解释您要完成的工作,因此我们无法告诉您如何解决它。告诉您在另一个组件中使用Routes
它可能会产生误导。
1. 虽然在 React 文档中被称为元素,但在处理prop-types时它被称为节点。