2017-04-03 16 views
0

アセットパス変数を追加する最も良い方法は何ですか?ReactとJSXでアセットパス変数を追加する最も良い方法は?

環境(ローカル、ステージング、プロダクション)によって異なるアセットディレクトリを持つアプリを開発しています。

現時点では、すべての画像パスはJSXでハードコードされていますが、これはローカルで開発する場合には問題ありません。ただし、ステージング時には、アセットのパスが少し異なります。

私が話していることの簡単な例です。

render() { 
    return (
     <div className="home-container"> 
      <img className="home-container__logo" src="/images/ui/logos/imagename.png" /> 
     </div> 
    ); 
} 

"/images"に画像src属性ポイント。これは、他の環境では異なる場合があります。

アセットパスvarを追加する、または{% static 'images/ui/logos/imagename.png' %}のようなものを実行する「リアクション方法」はありますか?

乾杯

+1

私は通常NODE_ENVに依存し、どこでも、私は必要それをインポートし、結果を返す関数は、それは私がお勧め非常に単純な方法 – AndreyS

+1

だん[作成するには、アプリに反応]( https://github.com/facebookincubator/create-react-app)には、環境変数とファイルパスを処理するための組み込みメソッドが付属しています。起きて走るのは簡単ではなく、このような問題で私を多く助けました。 – Toby

+1

* "アセットパスを追加する"リアクション方法 "はありますか?*いいえ。ただし、webpackはこれでかなり役に立ちます。 –

答えて

1

ありは一切リアクトで資産パスのヘルパーに建てられませんが、あなたの直感が良いですされています。これは良い抽象化され、そしてあなた自身を作る価値があります。あなたはWebPACKのを使用している場合、あなたはあなたのルートへのパスが含まれるようにmodule resolveを設定することができたフォルダを反応させ、その後、簡単な解決策は次のようになります。あなたは、WebPACKのか、いくつかの同等のものを使用していない場合

# app/helpers/AssetHelper.js 
export default { 
    imagePath: (path) => { 
    return `/images/${path}` 
    } 
} 

# your component 
import { imagePath } from 'app/helpers/AssetHelper' 

render() { 
    return (
    <div className="home-container"> 
     <img className="home-container__logo" src=${imagePath('ui/logos/imagename.png')} /> 
    </div> 
); 
} 

パスは相対的である必要があり、これは簡単な解決策ではありません。 webpackを使用している場合は、module resolveをチェックしてください。インポートされたファイルパスを単純化することができます。

例のWebPACKの設定使用して、モジュールの解決:

# webpack.config.js 
var path = require('path') 

module.exports = { 
    entry: ..., 
    output: ..., 
    resolve: { 
    // specify your new path relative to the webpack config file 
    modules: [path.resolve(__dirname, './app'), 'node_modules'] 
    } 
} 
関連する問題