流React:无法创建元素,因为React.Component [1]不是React组件

奥斯卡·雷耶斯(Oscar Reyes)

几周前我才开始使用flow,从一周前开始,我就遇到了流错误,但我不知道如何解决。

代码如下:

// @flow

import React, { Component } from "react";
import { Redirect, Route } from "react-router-dom";
import CookieStorage from "./../services/CookieStorage";
import type { Component as ComponentType } from "react";

type Props = {
    component: ComponentType<any, any>
}

class ProtectedRoute extends Component<Props> {
    render() {
        const isAuthenticated     = this.isAuthenticated();
        const {...props}          = this.props;
        const AuthorizedComponent = this.props.component;

        return (
            <Route
                {...props}
                render={props => (
                    isAuthenticated ?
                        <AuthorizedComponent {...props} /> :
                        <Redirect to="/"/>
                )}
            />
        );
    }

    isAuthenticated(): boolean {
        const data = CookieStorage.get("foobar");

        return data !== null;
    }
}

export default ProtectedRoute;

在这里流程抛出此错误:

Error:(23, 8) Cannot create `AuthorizedComponent` element because `React.Component` [1] is not a React component.

我不知道在身份验证示例正常时要为要呈现的组件执行错误的导入类型或错误的类型声明。

我已经从一个我不记得在哪里的网站上复制了此代码,但是他正在使用此片段,const {component: Component} = this.props并对其进行渲染,因为<Component {...props} />这对我来说似乎有点模棱两可,这就是为什么我稍微修改了声明以使其变得如此阅读时很容易理解,但是即使执行完全相同的代码(如我在复制此代码的位置处截取的代码),流仍然会抛出该错误。

我做了主旨的这情况下,有人会知道一个解决方案,并希望做出改变,如果没有人能够帮助我在这里解决这个问题,那么我会用这个发送票发行自己的项目要旨

尝试使用React.ComponentType代替吗?

import type { ComponentType } from "react";

import React, { Component } from "react";
import { Redirect, Route } from "react-router-dom";
import CookieStorage from "./../services/CookieStorage";

type Props = {
  component: ComponentType<any>
}

class ProtectedRoute extends Component<Props> {
  render() {
    const isAuthenticated = this.isAuthenticated();
    const { component: AuthorizedComponent, ...props } = this.props;

    return (
      <Route
        {...props}
        render={props => (
        isAuthenticated ?
          <AuthorizedComponent {...props} /> :
          <Redirect to="/"/>
        )}
      />
    );
  }

  isAuthenticated(): boolean {
    const data = CookieStorage.get("foobar");
    return data !== null;
  }
}

export default ProtectedRoute;

参见https://flow.org/en/docs/react/types/#toc-react-componenttype

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

无法在React组件中动态创建元素

在React组件中动态创建元素

无法使用 React Native 在循环中动态创建元素

有什么方法可以正确检测 React Component 中呈现的单个元素?(不是组件渲染)

使用循环在React中创建元素

React Functional Component 父子组件 - 未处理的拒绝(TypeError):X 不是函数

React和Typescript组件对`Component`的道具类型

React Component或React PureComponent

扩展React.Component与Component

创建div元素时的React.Component语法错误

使用React Dom使用id或class创建元素

使用React删除和重新创建元素

没有扩展React Component类的React组件

React组件是否需要从React.Component扩展?

从实例化的 React.Component 渲染 React 组件

警告:PageContainer(...):React组件类必须扩展React.Component

导入React,{Component}而不是React的好处是什么?

未定义不是对象(评估'_react.React.Component')

在React中创建类组件时,为什么还要扩展React.Component?

React-redux connect()无法包装定义为扩展React.Component的类的组件

React Component和CSSTransitionGroup

React Component API架构

React Component编辑数据

编写我的第一个HOF react组件时出错:如果返回return Component而不是<Component />,则可能会发生这种情况

React js。如何使用这种结构制作组件:<Component>组件说明</ Component>

React组件是函数而不是类

当附加到React组件的元素在React之外删除时,有没有办法通知React Component

在React中将引用从Component传递到Component

扩展Component <Props>与扩展React.Component