2017-12-31 12 views
1

React(Create React Appを使用して)で作成しているSETゲームでは、81個の可能なカードをインポートする必要があります。 Pythonスクリプトの助けを借りて、私は輸入Reactで長いインポートリストを避ける

import i0000 from './assets/0000.png' 
import i0001 from './assets/0001.png' 
[...] 
import i2221 from './assets/2221.png' 
import i2222 from './assets/2222.png' 

のこの非常に長いリストを作成し、私は各カードを表す文字列を使用してこれらの変数を参照する必要がありますから、私はこのオブジェクトを持っている:

const refs = { 
    '0000': i0000, 
    '0001': i0001, 
    [...] 
    '2220': i2220, 
    '2221': i2221, 
    '2222': i2222 
}; 

良いことは、今、私はすべてのカードの画像が

<img src={refs[card]} /> 

で簡単に呼ばれるように事前にロードされているということである。しかし悪いことは、私はそれを動作させるとんでもないコードの164行を持っています。画像がいっぱいのディレクトリをプリキャッシュして参照するためのより良い方法があるのだろうかと思います。

+0

このようなものを使用できますか?彼らはディレクトリからすべての画像をインポートするためにwebpackの機能を使用します。 https://stackoverflow.com/a/42118921/9104680 –

+0

これは、https://stackoverflow.com/questions/48560592/is-it-possible-to-import-a-group-of-images-as-anに役立ちます-array-create-react-app-projec/48561549#48561549 – Jayavel

答えて

0

publicフォルダにすべての画像を移動します(例:public/cards)。

で参照することができます。importステートメントは不要です。

Webpackは参照画像が欠落していると警告することができなくなるので、それらが存在することを確認してください。

+0

イメージがプリキャッシュされていないことを意味しませんか? – wbruntra

+0

'webpack'は、インポートされたイメージを単に' public/static/media'に束ねます(デフォルト)。生成されたhtmlコードでは、画像は上記のコードと同じ方法で参照されます(異なるディレクトリとファイル名を除く)。ブラウザの 'Network'タブに行き、あなたのページを更新することで、これを見ることができます。 – riwu

+0

ファイルを処理するためにwebpackを設定することは、ファイルを処理するというあなたの要点を取りますが、標準のCreate React Appセットアップはこれを行いません(少なくとも、私たちが 'index.html'を含むものと同じパブリックフォルダについて話している場合)上記の問題を解決する良い方法です。 – wbruntra

0

二つのアプローチ:

まず、手動でこのようなあなたのコードをstruturingでレフリーオブジェクトを作成排除:

export i0000 from './assets/0000.png' 
export i0001 from './assets/0001.png' 

そして、あなたはこれらの資産を使用したい:

imports * as refs from './assets' 
<img src={refs[card]} /> 

第二に、ダイナミックなニーズをサポートするバンドルシステムを使用することができます。 https://webpack.github.io/docs/context.html#dynamic-requires

+0

イメージをレンダリングしようとしているときに、私がアクセスできるのはカードを表す文字列なので、最初の点では、refオブジェクトによってトリップされてしまいます。したがって、エクスポートは 'i0000'という名前の変数ですが、カードは '0000'です。どのように私は2つを関連付けることができますか? – wbruntra

+0

このように: ' ' – gunn

関連する問題