HTMLImageElement无效,无法作为React子级

时间:2019-07-18 08:54:47

标签: javascript reactjs image

我正在尝试异步加载图像,只有在加载图像后,才在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>标签,它就可以正常工作。

3 个答案:

答案 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 }}/>}