javascript - React同步多张图片的onLoad

标签 javascript reactjs flux redux

假设我有数量不详的图像正在使用 Andrew Farmer's example image component它检测每个单独的图像何时加载:

import React from 'react';

class ImageWithStatusText extends React.Component {
  constructor(props) {
    super(props);
    this.state = { imageStatus: null };
  }

  handleImageLoaded() {
    this.setState({ imageStatus: 'loaded' });
  }

  handleImageErrored() {
    this.setState({ imageStatus: 'failed to load' });
  }

  render() {
    return (
      <div>
        <img
          src={this.props.imageUrl}
          onLoad={this.handleImageLoaded.bind(this)}
          onError={this.handleImageErrored.bind(this)}
          />
        {this.state.imageStatus}
      </div>
    );
  }
}
export default ImageWithStatusText;

使用 Flux 或 Redux 等框架,同步所有图像组件以检测所有图像何时加载完成的最简单方法是什么?

最佳答案

在 redux 中设置计数器可能是有意义的。对于每个图像,您可以分派(dispatch)一个操作来增加 componentDidMount 中的 imagesOnPage 计数器,然后分派(dispatch)一个操作来增加 handleImageMounted 中的 loadedImagesOnPage 。对于 handleImageErrored,您可以减少 imagesOnPage。当 imagesOnPage === loadedImagesOnPage 时,加载所有图像。

一个更健壮的方法是为每个图像生成一个唯一的 ID,并有一个 images 化简器,每个键是唯一的 ID,值是它的状态: { image_1234: '正在加载', image_111: '已加载', image_12: '错误' } 您可以编写一些实用程序来查看该 reducer 并查看是否所有图像都处于 loaded 状态。

关于javascript - React同步多张图片的onLoad,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35093293/

相关文章:

javascript - ReactJS + Flux - 如何实现 toasts/通知?

java - 如何有选择地跳过 Flux 上的多个处理步骤

javascript - 是否有一个简单的解决方案来解决 "exclude/hide"函数中的 div?

javascript - Boost::asio::async_read_until 从不调用处理程序

javascript - Gatsby 插件 : How Can I Take a Component as a Plug-In Option?

javascript - 如何获取自定义 React Babel pragma 将字符串作为参数而不是函数传递

javascript - 为什么状态改变时 react 不调用渲染?

javascript - java webservice返回xml而不是字符串: invoked from java script

javascript - 如何在php文件中调用jquery函数

reactjs - 添加依赖项会出现错误 : 'react-scripts' is not recognized as an internal or external command, 可运行程序或批处理文件”