使用重构创建HoC find_package(
和withState
时出错:
lifecycle
我的组件树如下所示:
warning.js?8a56:36 Warning: React.createElement: type should not be null, undefined, boolean, or number. It should be a string (for DOM elements) or a ReactClass (for composite components). Check the render method of `AppContainer`.
答案 0 :(得分:0)
SimpleImage
组件仍然引用this
和state
,尽管它是无状态功能组件。删除这些引用并将this.onLoad
替换为onLoad
,this.onFail
替换为onFail
,将this.state.status
更改为status
可正常工作。
更新的SimpleImage
组件如下所示:
export function SimpleImage(props) {
const {
src,
width = 200,
height = 200,
rounded,
circle,
status,
onLoad,
onFail,
} = props;
const mainWrapperStyle = style({
backgroundColor: 'white',
backgroundSize: 'contain',
backgroundRepeat: 'none',
boxSizing: 'border-box',
position: 'relative',
width,
height,
});
const roundedStyle = style({
borderRadius: '10%',
overflow: 'hidden',
});
const circularStyle = style({
borderRadius: '50%',
overflow: 'hidden',
});
const defaultImageStyle = style({
opacity: 0,
transisition: 'opacity 150ms ease',
});
const loadedImageStyle = style({
opacity: 1,
});
let imageStyle = defaultImageStyle;
let wrapperStyle = mainWrapperStyle;
if (rounded) {
wrapperStyle = merge(mainWrapperStyle, roundedStyle);
} else if (circle) {
wrapperStyle = merge(mainWrapperStyle, circularStyle);
}
if (status === LOADED) {
imageStyle = merge(defaultImageStyle, loadedImageStyle);
}
debugger
const image = (<img
{...imageStyle}
src={src}
width={width}
height={height}
role="presentation"
onLoad={onLoad}
onError={onFail}
/>);
let statusIndicator = null;
if (status === LOADING) {
statusIndicator = (<LoadingIndicator />);
} else if (status === FAILED) {
statusIndicator = (<ErrorIndicator />);
}
return (<div {...wrapperStyle}>
{statusIndicator}
{image}
</div>);
}