如何在渲染前查找和修改 React 中的 DOM 个节点?

How to find and modify DOM nodes in the React before render?

我看不出如何在渲染前查找和修改 React DOM 节点的正确方法。 例如,我需要将组件内所有已创建的图像设为 延迟加载 。但问题是我不知道用户会插入哪些节点。因此,我需要在用户将节点放置在组件中后寻找它们,我认为使用 componentWillMountconstructor...

实际上在 jQuery 中,用于在用户插入后替换真实的 src。我会做这样的事情:

jQuery('.wrapper img').each(element => {
    let realSrc = element.attr('src')
    element
        .attr('data-real-src', realSrc)
        .attr('src', './fakeimage.png')
})

所以在 React 中,我认为我必须做这样的事情...

const modifiedChildren = children.reduce((arr, next) => {
    let modified = {
        ...next,
        src: './fakeimage.png',
        'data-real-src': next.src
    }
    return [
        ...arr,
        modified
    ]
}, [])

render {
    <div className="wrapper">{ modifiedChildren }</div>
}

你能帮我导航一下吗?

停止思考 DOM 个节点。开始思考组件。

您想要一个新组件 LazyLoadedImage 获取真实的 URL 并在触发后显示它。类似的东西:

import fakeImage from 'assets/fakeimage.png';

const LazyLoadedImage = ({url, displayActualImage, ...props}) => {
    if(displayActualImage) return <img {...props} src={url}>;
    else return <img {...props} src={fakeImage}>;
}

用法示例:

<Slider>
    {images.map((obj, index) =>
     <LazyLoadedImage className='slider__img' url={obj.largeImageURL}
                      alt={obj.tags || 'cap'} key={index}/>)}
</Slider>