我正在尝试异步加载图像,只有在加载图像后,才在React应用程序中显示它。
componentDidMount() {
const img = new Image();
img.onload = () => {
this.setState({
originalImage: img,
});
}
img.src = './images/testImage.jpg'
}
render() {
return (
<main>
{
this.state.originalImage
}
</main>
);
}
我遇到以下错误:
对象作为React子对象无效(找到:[object HTMLImageElement])
我想知道为什么会发生此错误。当然,如果我只添加一个<img>
标签,它就可以正常工作。
答案 0 :(得分:1)
如错误所述,this.state.originalImage
是一个对象。您可能正在寻找src
道具,可以像这样使用它:
render() {
return (
<main>
<img src={this.state.originalImage.src}/>
</main>
);
}
答案 1 :(得分:1)
React无法直接显示HTML元素。如果要以编程方式创建元素,则必须使用React提供的功能。
componentDidMount() {
const url = 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRYd74A26KhImI1w9ZBB-KvWUcasVnQRe_UOrdZPqI4GOIN0mC3EA';
let img = React.createElement(
"img",
{
src: url,
},
)
this.setState({
originalImage: img,
})
let divExample = React.createElement(
'div',
null,
`Hello World`
);
this.setState({
divExample: divExample
})
}
render() {
return (
<div>
<div>Hi</div>
{
this.state.divExample
}
<main>
{
this.state.originalImage
}
</main>
</div>
);
}
React解析div,img,HelloWorld(自定义)等jsx元素,并在其中创建React Elements。
答案 2 :(得分:0)
另一个想法是dangerouslysetInnerHTML - 像这样?
<div dangerouslySetInnerHTML={{ __html: this.state.originalImage.outerHTML }}/>}