当前位置: 首页 > 知识库问答 >
问题:

“(AppContainer)RangeError:超出最大调用堆栈大小”-使用反应热加载器进行反应

高吉星
2023-03-14

我正在与非常奇怪的错误作斗争,我在过去的2个小时里没有找到解决方案,所以我决定寻求帮助。

我用TypeScript设置了React、Redux、Webpack、React Hot Loader。

我使用了样板文件,但在遇到这个问题后,我更改了webpack配置以反映RHL存储库中的示例。

它编译正确,但我不能得到受保护的路由工作,因为如果用户被认证,所以它应该呈现提供的组件,这是抛出这个问题的标题错误。

这是我的ProtectedRoute组件:

import React, { Component, FunctionComponent } from 'react';
import { Redirect, Route } from 'react-router';
import { isAuthenticated } from './auth';

interface IProps {
  component: Component | FunctionComponent;
  path: string;
}
const ProtectedRoute: FunctionComponent<IProps> = ({ component, ...rest }) => (
  <Route
    {...rest}
    render={(props) => {
      if (isAuthenticated()) {
        console.log('should render', component);
        return <Component />;
      }
      return <Redirect to="/login" />;
    }}
  />
);

export default ProtectedRoute;

就这么简单。

我只是试图使用:

<ProtectedRoute path="/dashboard" component={() => <div>Test</div>} />

到目前为止,isAuthenticated是一个非常简单的函数:

export const isAuthenticated = () => {
  const accessToken = localStorage.getItem(ACCESS_TOKEN_STORAGE_KEY);
  console.log('checking auth');
  if (accessToken) {
    return true;
  }
  return false;
};

我可以将任何内容传递到受保护的路由,它总是会抛出:

(AppContainer)范围错误:超出了最大调用堆栈大小

这是调用堆栈:

React-hot-loader.development.js?2cd8:2202 未捕获的范围错误:在组件.热加载程序开发(反应热加载程序开发.js.js?2cd8:718)在组件.热加载程序开发(反应热加载程序开发.js?2cd8:718)处,在 Object.asynacher.asconr.js ender(反应热加载程序开发.js?2cd8:750)处,在组件.hot组件更新器(反应热加载程序开发.js?2cd8:730) at Component.proxiedRender (react-hot-loader.开发.js?2cd8:750) 在组件.热加载器开发.js?2cd8:730) 在组件代理发布 (react-hot-loader.开发.js?2cd8:750) 在组件.热加载程序开发(反应-热加载程序.开发.js?2cd8:730) 在组件代理更新器 (react-hot loader.开发.js?2cd8:750)

我真的不知道发生了什么。

我已尝试更改配置:

setConfig({
    logLevel: 'debug',
    ignoreSFC: true, // the same error
    pureRender: true // change error to instance.render is not a function
  });

但这于事无补。

我将非常感谢任何帮助。

具有重复问题的存储库:https://github.com/murbanowicz/rhl-issue

共有1个答案

丌官盛
2023-03-14

ProtectedRoute的呈现方法返回React。组件而不是在props中传递给它的组件。

 类似资料:
  • React.js用props给后代组件发值错了? 我编写了前面的演示来测试使用向后代组件发送信息。但它导致了错误: 未捕获的范围错误:对象超过了最大调用堆栈大小。克隆元素 但是我在演示运行良好后才写,所以你能告诉我是什么原因导致错误吗?

  • 问题内容: 我正在做反应,基本上我想用工具提示制作一个按钮,现在我正在制作工具提示。我正在更改css display属性,以使其在鼠标进入和离开时不可见。但是有一个错误,我不知道该怎么办… 这是我的代码: 在控制台中,我收到此错误: 我找不到问题所在。我知道这可能与调用一个函数有关,后者又调用另一个函数。但是我在代码中看不到这样的东西,而且不确定是否全部。感谢帮助 :) 问题答案: 每当您看到从函

  • 问题内容: 我想这意味着有一个循环引用,但是对于我的一生,我无法猜测如何解决它。 有人有主意吗? http://plnkr.co/edit/aNcBcU?p=预览 检查Chrome中的调试控制台(例如),您将看到错误。冒犯的行是 通过以下方式在控制器上对scope.map进行“ $ watched” 问题答案: 这是因为您要比较对象是否相等,而不是参考。将您的声明更改为此:

  • 这是我在React中的第一个应用程序。在localhost中,一切正常,当我使用Github Pages部署时,我的应用程序(Info/Images/evenements)中的一些页面无法呈现。每次单击他们的链接访问他们时,我都会在控制台上看到一个白色页面和此错误: range error:object . tostring处超出了最大调用堆栈大小 同样,当我刷新页面时,github pages返

  • 我将redux添加到我的项目中进行状态管理,在添加reducer之前一切都很好 我认为每个中间件功能的下一步(操作)都会导致问题,但我不知道如何修复它。 我使用的是React 17.0.2,React redux 7.2.3,redux 4.1.2。 动作-- 中间件-- 中间件-- 减速机 -- 商店.js:

  • 我在我的应用程序中使用react路由器v4。我正在开发一个仪表板,它有一个顶部导航,侧导航和主体布局。侧边导航有一个链接列表,当点击它的时候,它会转到它们的组件,并在另一个被称为主体的组件中呈现它们的组件。我已经将仪表板组件分解为顶部、侧面和主要部分。在索引中,我创建了一个路由列表,并将这些路由作为道具发送到主体,以便我可以呈现路由组件。 这样,我得到的误差为 已超出最大调用堆栈大小 为什么会这样