【问题标题】:React-bootstrap styling showing up before finished api call在完成 api 调用之前显示 React-bootstrap 样式
【发布时间】:2018-02-03 22:32:30
【问题描述】:

我正在 React 中制作一个使用 Axios 获取随机图像的小型应用程序。我正在使用 React-bootstrap 来设置图像的样式,但是在图像加载完成之前会显示一个小白框半秒。我该如何解决这个问题?

这是我的代码:

import React, { Component } from 'react';
import axios from 'axios';
import { Link } from 'react-router-dom';
import { Image, Button } from 'react-bootstrap';


const ROOT_URL = 'myurl'

export default class WhatDog extends Component {

  constructor(props){
    super(props);

    this.state = { randomImg: '' };
  }

  componentDidMount(){
    axios.get(ROOT_URL)
    .then(res => {
      const data = res.data.message
      this.setState({ randomImg: data })
    })
  }

  renderImage(){
    return(
      <div>
        <Image src={this.state.randomImg} className="img" thumbnail/>
        <Link to="/">
          <Button bsStyle="danger" bsSize="large">Go back</Button>
        </Link>
      </div>
    )
  }



  render() {

    return (
      <div className="App">
          {
            (this.state.randomImg === '')
            ? <div>
                <h1>Loading...</h1>
              </div>

            : <div>
                {this.renderImage()}
              </div>
          }
      </div>
    );
  }
}

【问题讨论】:

  • 您没有看到 Loading...
  • 我看到加载,但我也看到它下面的小空白框。
  • 图片需要一些时间才能真正被浏览器完全加载..
  • 如果没有看到实际呈现图像的代码,可能很难确定为什么图像上的样式很奇怪。您能否提供您的 Image 类的来源?据我所知,您提供的代码似乎没有任何问题
  • 我应该在 renderImage 函数中添加一个 setTimeout 吗?

标签: javascript css reactjs react-bootstrap


【解决方案1】:

浏览器将触发onLoad 事件,在图像生成后,您可以命名它..loaded 所以在此之前,将visibility 设置为隐藏..而不是display: none!因为display: none 也会阻止加载。

解决方案可能看起来像这样

<Image
  src={this.state.randomImg}
  style={!this.state.imgVisible ? {visibility: 'hidden'} : {}}
  onLoad={() => this.setState({ imgVisible: true })}
/>

注意:这是使用内联样式和箭头函数,这不是最好的,但为了演示的简单性,您也可以使用 className 代替,由您决定;)

你明白了……

【讨论】:

  • 成功了!我唯一改变的是“风格”到“风格”。谢谢,伙计。 ;)
  • 另请注意,当您更改图像时,您必须再次将imgVisible 设置为false
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-08
  • 2020-08-13
  • 2020-06-09
  • 2016-11-08
相关资源
最近更新 更多