2017-01-30 10 views
0

配列から複数のイメージをレンダリングしようとしています。イメージコンポーネントにプロパティとして渡しています。しかし、何らかの理由で、レンダリングしたいローカルイメージが表示されません。 Webアドレスでホストされている画像をロードすると、その画像になります。これは、「imageSource」プロパティが画像コンポーネントに渡されることに何も問題がないことを示しています。ReactJSを使用してローカルイメージを動的にロード

<img src={{uri: source}} role="presentation" style={style.image} /> 

...しかし、私は何も任意の違いはありません:

let source = 'require(./img/' + props.imageSource + ")"; 

またはしよう:私はそうのようなソース形式で遊んで試してみました。

成分は下記のとおりです。私は完全に立ち往生しているので、大いに助けになるでしょう!

import React from 'react'; 

let Image = function statelessFunctionComponentClass(props) { 

    let source = './img/' + props.imageSource; 

    const style = { 

    image : { 

     width: '400pt', 
     height: '400pt' 
    } 
    } 

    return (

    <img src={source} role="presentation" style={style.image} /> 
) 
} 

export default Image 
+0

Reactアプリケーション用のバンドラーまたはビルダーは、読み込む画像を知る必要があるため、少なくともコンテキストを指定する必要があります。 Webpackを使用している場合は、これをrequire.contextオプションと呼びます。 – bonesbrigade

+0

返信いただきありがとうございます。もう少し明確にしていただけますか?リンクが役立ちます。 –

+0

これには解決策が見つかりましたか? – Itzdsp

答えて

2

イメージのフォルダを含めるには、require.context()で新しいコンテキストを作成します。そこから、そのフォルダから必要なイメージに動的にアクセスし、それをsrcとして設定できます。このような構造のオフに行く

:YourContainer.jsで

APP 
├──webpack.config.js 
├──src 
    ├──containers 
     ├──YourContainer.js 
    ├──components 
     ├──YourComponent.js 
├──public 
    ├──bundle.js 
    ├──images 
      ├──dog.png 
      ├──cat.png 

は、あなたが

const images = require.context('../../public/images', true); 

そこから、あなたが参照できるimagesディレクトリことを要求する新しいコンテキストを作成したいです特に画像:

const dog = images('./dog.png'); 

または動的:

より完全な例については
let animal = images("./" + someVariable + ".png"); 

は、ここにあなたがあなたのイメージを引っ張るためにキーを使用して、オブジェクトを反復処理し、子コンポーネントへのスタイルの小道具としてあることを通過する間にそれを行うことができます方法は次のとおりです。

let YourContainer = ({ dispatch }) => { 
const data = projectData["projectData"]; 

// Require context image folder 
const images = require.context('../../public/images', true); 


return (  
    <div className="container-fluid"> 
     <Row> 
      { 
       // Iterate over data object 
       Object.keys(data).map((keyname, keyindex)=> { 

        let code = data[keyname]["code"]; 
        let title = data[keyname]["title"]; 
        // Dynamically reference image 
        // Set as inline style 
        // Pass as prop to child 
        let imgsrc = images("./"+code+".png"); 

        let styler = { 
         backgroundImage: "url(" + imgsrc + ")" 
        } 

        return <YourComponent 
           key={keyindex} 
           title={title} 
           style={styler} 
          /> 
       }) 
      } 
     </Row>  
    </div> 
) 
} 
+0

私はこれを試して、それは正常に働いた。ありがとう! – Dlaugh14

関連する問題