如何判断图片(img)是否已经加载成功--基于react

我过去经常会问:

 有没有一种方法去判断子类组件是否已经渲染完成?
 

答案当然是有的啦  componentDidMount(),在react component 已经渲染完成时 就会调用 componentDidMount()方法

如果你对  componentDidMount() 不太熟悉, 那么建议你去看看react组件的生命周期(React Component Lifecycle Methods),哪里每一个方法你早晚都会用到的。

稍微多了解一些,你会意识到提问者真的想要知道的是图片何时才算已经完成加载了,以react已经渲染了<img>标签为标准是不能拿来判断图片已经加载完成的。

让我们来建立几个简单的定义来理解rendered 和 loaded

rendered(也叫渲染完成):react 已经把你的虚拟DOM元素转化到真实DOM元素中并和真实的DOM建立起连接。

loaded:指图片数据或者其他来自服务器端等远程客户端上的内容已经下载完成了(或者已经下载失败了)

如果你还不都清楚,简单的说,render 总是会在 load 之前

为什么要等待一个图片加载?

额, 也许当你的图片已经加载完了后你希望:

  • 隐藏loading图标。
  • 自动加载更多图片。
  • 转化UI,使图片更加凸显。
  • 或者其他理由

想要找出如何判断图片加载事件的方法,那么就接着往下读吧。

onLoad & onError

onload 和 onerror   这两个属性以及可以正常的在DOM<img>标签上使用了(HTMLImageElement),react 要使用驼峰格式来获取这个事件,这也是onLoad and onError的来由。react的文档中已经提倡这么用了,但并没有讨论具体为什么要这么用(Image Events

 所以你只要添加 onLoad and onError这两个事件在你的react <img>标签中就行了。如果还是不够清楚,那么看看下面的代码栗子吧!

 

Short Example

这里是一个关于使用 onLoad 事件的简短的栗子, 想看更多详细的关于如何显示loading图直到图标加载完成的栗子, 就看看作者的下一篇文章(React Image Gallery

 

下面的这个组件, ImageWithStatusText, 加载一张图片和和显示一段文本:'loaded' 或者 'failed to load'

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;

它相当短吧。好好理解吧,希望对你们有用(这段话是译者瞎哔哔的)

转载于:https://www.cnblogs.com/anhaiming/p/5456154.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用 `react-native-svg` 和 `react-native-svg-transformer` 加载本地 SVG 图像,你可以按照以下步骤进行操作: 1. 首先,确保你已经在项目中安装了 `react-native-svg` 和 `react-native-svg-transformer` 依赖。你可以通过运行以下命令来安装它们: ``` npm install react-native-svg react-native-svg-transformer ``` 2. 在项目的根目录下创建一个名为 `metro.config.js` 的文件(如果已存在,请跳过此步骤)。 3. 在 `metro.config.js` 文件中添加以下内容: ```javascript module.exports = { transformer: { assetPlugins: ['react-native-svg-transformer'], }, }; ``` 4. 接下来,在你的组件中,使用 `react-native-svg` 中的 `<SvgUri>` 组件来加载本地 SVG 图像。首先,确保你的 SVG 图像位于项目的 `assets` 文件夹中。 ```javascript import React from 'react'; import { View } from 'react-native'; import SvgUri from 'react-native-svg-uri'; const MyComponent = () => { return ( <View> <SvgUri width={200} height={200} source={require('./assets/myImage.svg')} /> </View> ); }; export default MyComponent; ``` 在上面的示例中,我们使用 `require` 方法加载位于 `assets` 文件夹中的 `myImage.svg` 图像,并将其作为 `source` 属性传递给 `<SvgUri>` 组件。你可以根据自己的需要调整宽度和高度。 5. 确保你在重新启动 Metro Bundler 之前完成了以上步骤。你可以通过运行以下命令重新启动 Metro Bundler: ``` npx react-native start --reset-cache ``` 这样,你就可以使用 `react-native-svg` 和 `react-native-svg-transformer` 成功加载和显示本地 SVG 图像了。 希望对你有所帮助!如有任何疑问,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值