reactjs - 为什么我得到:在返回的组件实例上找不到`render`方法:您可能忘记定义`render`
问题描述
这是我得到的错误:
No `render` method found on the returned component instance: you may have forgotten to define `render`.
in Component (at withScreenDimensionHOC.js:11)
包装HOC
to 类组件时导致的错误
export default connect(mapStateToProps, mapDispatchToProps)(
withScreenDimensionHOC(ClassComponent)
);
这就是我创建自定义钩子和 HOC 的方式
我创建了自定义钩子:
import { useEffect, useState } from 'react';
export const useScreenDimension = () => {
const [width, setWidth] = useState(window.innerWidth);
const [height, setHeight] = useState(window.innerHeight);
useEffect(() => {
const handleDimension = event => {
setWidth(event.target.innerWidth);
setHeight(event.target.innerHeight);
};
window.addEventListener('resize', handleDimension);
return () => {
window.removeEventListener('resize', handleDimension);
};
}, []);
return { width, height };
};
特设:
import React, { Component } from 'react';
import { useScreenDimension } from './useScreenDimension';
const withScreenDimensionHOC = () => {
return props => {
const { width, height } = useScreenDimension();
return <Component width={width} height={height} {...props} />;
};
};
withScreenDimensionHOC.displayName = 'withScreenDimensionHOC';
export default withScreenDimensionHOC;
然后包装HOC
到类组件
export default connect(mapStateToProps, mapDispatchToProps)(
withScreenDimensionHOC(ClassComponent)
);
解决方案
您正在尝试渲染<Component>
React 的基础组件类。
它没有渲染方法,就像错误所说的那样。您将组件传递给withScreenDimensionHOC
但忽略它。不要忽视它;)
你的意思可能是这样的:
const withScreenDimensionHOC = WrappedComponent => (
props => {
const { width, height } = useScreenDimension()
return <WrappedComponent width={width} height={height} {...props} />
}
)
推荐阅读
- python - dask 数组上的 if 语句
- pip - 实际存在时缺少必需的 pip 包?
- html - 为什么按钮在 CSS 的任何层都不起作用?
- google-cloud-platform - 私钥应该是使用 GCP 提供程序的 PEM 或普通 PKSC1 terraform 错误
- c++ - 在 QNX Momentics 中为自定义构建配置定义自定义符号
- java - Maven 构建失败,超过 GC 开销限制
- c++ - 向量
> 使用 memcpy 到 mxArray - python - 截断 MD5 的 ECDF 图
- php - 奇怪的 PHP 错误
- python - 在脚本运行和保存在磁盘上时,浮点数、列表和元组是否具有相同的大小/内存使用情况?