反应高阶组件不渲染传递的组件

Kob*_*bby 3 html javascript reactjs higher-order-components

我正在写一个 HOC 来反应来处理一些滚动功能的繁重工作。我很难让组件渲染。我不断收到此错误:

warning.js?d9a2:33 Warning: React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: object.
Run Code Online (Sandbox Code Playgroud)

我将其精简为 HOC 的最基本部分,但仍然收到此错误。这是我的代码:

这是 HOC 本身:

warning.js?d9a2:33 Warning: React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: object.
Run Code Online (Sandbox Code Playgroud)

这就是我在我的观点之一中使用它的方式:

import React from 'react';

const withOnScreenMonitor = WrappedComponent => {
    return class OnScreenMonitor extends React.Component {
        render(){
            return (
                <WrappedComponent/>
            )
        }
    }
};

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

我不断收到此错误。我在设置这个 HOC 的过程中是否遗漏了一些东西?

Shu*_*tri 5

您的 HOC 需要一个组件来渲染,而不是 JSX 元素。此外,您还必须从渲染方法中取出静态内容。您可以简单地创建一个功能组件并像这样使用它

import withOnScreenMonitor from "../global-elements/OnScreenMonitor";
const ComponentWithOnScreenMonitor = withOnScreenMonitor(() => <div>test</div>);
render(){
  //// other code

  return (
    <Fragment>
      <div>
      /// other components
      </div>
      <ComponentWithOnScreenMonitor/>
    </Fragment>  
  )
}
Run Code Online (Sandbox Code Playgroud)