javascript - 在 Preact 中渲染 HTMLImageElement dom 节点

标签 javascript image dom jsx preact

(注意:我问的是 Preact,而不是 React,后者有使用 Reacts DomElement 包装组件的解决方案)。

我有一个 HTMLImageElement,它是使用 var img = document.createElement('img') 创建的。如何使用 Preact 渲染这个手动创建的 DOM 元素?

以下 JSX 代码段可以工作,但对于移动设备上的较大图像来说速度非常慢:

<img src={img.src} />

我认为它很慢,因为图像实例是在内存中复制的,而不是使用现有的 DOM 节点和图像缓冲区。

有更好(更快)的解决方案吗?

最佳答案

看来react-dom-element-wrapper组件很容易移植到 preact,主要区别在于在 preact 中,props.children 始终是一个 Array.

看看这个组件是否可以渲染您的图像:

// Based on https://github.com/antialias/react-dom-element-wrapper/blob/master/index.js
class DomWrapper extends Component {
    update = () => {
        let fragment = document.createDocumentFragment();
        this.props.children.forEach((child) => fragment.appendChild(child))
        this.el.innerHTML = '';
        this.el.appendChild(fragment);
    }

    componentDidMount() { this.update(); }

    componentDidUpdate() { this.update(); }

    render() {
        return <div ref={(el) => this.el = el} />
    }
}

用法示例:http://jsfiddle.net/epc3skk3/6/

关于javascript - 在 Preact 中渲染 HTMLImageElement dom 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45525140/

相关文章:

javascript - jquery动画宽高设置

Javascript,处理 foreach 和回调

javascript - Angular 2 从外部数据引导应用程序

html - 透明背景图像的 CSS 颜色过渡行为

javascript - 简单的javascript问题-onMouseOver div背景更改

javascript - 为什么只能从 javascript 访问某些 CSS 样式?

javascript - 从 img 标签获取源图像文件

html - dom crud 使 Bootstrap 中的滚动变慢

javascript - Jquery 分离并重新附加到另一个

mysql - 我可以将图片加载到 mySQL 服务器端吗?