2017-08-25 11 views
1

私はAxiosを使ってランダムイメージを取得する小さなアプリケーションをReactで作っています。私はReact-bootstrapを使って画像をスタイルしていますが、画像がロードされる前に小さな白いボックスが半秒間表示されます。どうすれば解決できますか?リアブートストラップスタイリングがapiコール終了前に表示されます

これは私のコードです。その前にそう

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> 
    ); 
    } 
} 
+0

あなたは**読み込んでいます... **? –

+0

私は荷物を見るが、私はまたそれの下に小さな空の白いボックスが表示されます。 – FakeEmpire

+0

イメージがブラウザによって実際に読み込まれるまでに時間がかかります。 – webdeb

答えて

0

画像がされた後、ブラウザは、onLoadイベントを発生します、あなたはそれに名前を付ける... loadedは、NOT display: none ...隠さにvisibilityを設定しました! display: noneもローディングを防ぎます。

ソリューションは、この

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

ノートのようなものになります。これは、あなたがあなたの代わりにクラス名も、その十分なことができる最高のされていない、インラインスタイルと矢印機能を使用しますが、デモを簡単にするためにされたが、それまであなた;)

あなたは考えを持っています...

+0

これはうまくいきました!私が変えたのは、 "スタイル"から "スタイル"だけです。ありがとう、仲間。 ;) – FakeEmpire

+1

Aa、gotcha、ありがとう、私はそれを更新します。 – webdeb

+1

また、イメージを変更するときには、 'imgVisible'を' false'に再度設定する必要があります – webdeb

関連する問題