React类组件封装自定义HOC时报错:未找到组件实例的render方法
报错触发原因
- 你编写的
withScreenDimensionHOC高阶组件没有接收传入的目标类组件作为参数,调用withScreenDimensionHOC(ClassComponent)时传入的ClassComponent没有被捕获使用。 - HOC内部错误渲染了从React导入的
Component基类,而不是你传入的自定义类组件。React原生的Component基类本身没有实现render方法,直接渲染就会触发你看到的缺失render方法的报错。
解决方法
修改withScreenDimensionHOC的代码,正确接收传入的目标组件,并且在内部渲染该组件即可:
import React from 'react'; import { useScreenDimension } from './useScreenDimension'; // 正确接收传入的被包裹组件参数 const withScreenDimensionHOC = (WrappedComponent) => { return props => { const { width, height } = useScreenDimension(); // 渲染传入的自定义组件,而非React的Component基类 return <WrappedComponent width={width} height={height} {...props} />; }; }; withScreenDimensionHOC.displayName = 'withScreenDimensionHOC'; export default withScreenDimensionHOC;
修改完成后原有组件包裹逻辑无需调整,只要你的React版本在16.8以上支持Hook,即可正常运行。
内容的提问来源于stack exchange,提问作者Arjjun
相关产品推荐
相关产品推荐

