ReactインラインスタイルでbackgroundImageを設定する


286

静的画像にアクセスして、backgroundImageReact 内のインラインプロパティ内で使用しようとしています。残念ながら、私はこれを行う方法について枯渇しています。

一般に、私はあなたが次のようにしたと思った:

import Background from '../images/background_image.png';

var sectionStyle = {
  width: "100%",
  height: "400px",
  backgroundImage: "url(" + { Background } + ")"
};

class Section extends Component {
  render() {
    return (
      <section style={ sectionStyle }>
      </section>
    );
  }
}

これは<img>タグで機能します。誰かが2つの違いを説明できますか?

例:

<img src={ Background } /> 正常に動作します。

ありがとうございました!

回答:


471

backgroundImageプロパティ内の波括弧が間違っています。

おそらくあなたは画像ファイルローダーと一緒にwebpackを使っているので、Backgroundはすでに文字列であるはずです: backgroundImage: "url(" + Background + ")"

以下のようにES6文字列テンプレートを使用して同じ効果を実現することもできます。

backgroundImage: `url(${Background})`

私はそれを私の質問に加えるべきだった。幅と高さを設定しています(それぞれ100%/ 400px)。発生する問題は、reactが静止画像を処理する方法にあると考えています。
クリス

w3.org/TR/CSS2/syndata.html#value-def-uriに従って連結する前に、Background変数の「(」、「)」および空白文字をエスケープする必要がありますか?
qbolec

49
:完全な構文は次のようになりますstyle={{backgroundImage: "url(" + Background + ")"}}
マイク

2
@mikeのコメントを展開するために、Reactが入力するのはJSモードで、もう1つは新しいオブジェクトを示すため、二重の中括弧が必要です。
CiprianTomoiagă2018

'./background.jpg'からこのインポートバックグラウンドを指定した後、「セクション」は定義されていますが使用されていません」というエラーが表示されます。var sectionStyle = {width: "100%"、height: "400px"、backgroundImage:url(${Background})}; クラスSection extends Component {render(){return(<section style = {sectionStyle}> </ section>); }}
パバナンMS 2018

40

ES5を使用している場合-

backgroundImage: "url(" + Background + ")"

ES6を使用している場合-

backgroundImage: `url(${Background})`

基本的に、backgroundImageプロパティの動作に値を追加しながら不要な中括弧を削除すると機能します。


2
ES6での私にとってはbackgroundImage: `url("${Background}")`、あなたのES6の例ではうまくいかなかったためです。
S ..

37

画像をフルスクリーンに設定するインラインスタイル:

style={{  
  backgroundImage: "url(" + "https://images.pexels.com/photos/34153/pexels-photo.jpg?auto=compress&cs=tinysrgb&h=350" + ")",
  backgroundPosition: 'center',
  backgroundSize: 'cover',
  backgroundRepeat: 'no-repeat'
}}

17

require()関数を使用して、コンポーネントに画像を取り込むこともできます。

<div style={{ backgroundImage: `url(require("images/img.svg"))` }}>

中括弧の2つのセットに注意してください。最初のセットは反応モードに入るためのものであり、2番目のセットはオブジェクトを表すためのものです


画像パスがローカルパスではなくWeb URLの場合はどうなりますか?何かhttps://images.com/myimage.png
加納

3
わかりました、WebベースのURLを使用する場合。私はただ書くべきですurl(https://images.com/myimage.png)
カノ・アミヌ

4

次のbackgroundImageようなプロパティの代わりに、テンプレートリテラル(バックティック: `...`で囲まれています)を使用できます。

backgroundImage: `url(${Background})`


2

私にとってうまくいったのは、このようにすることです

style={{ backgroundImage: `url(${require("./resources/img/banners/3.jpg")})` }}

-1

あなたは私たちを試すことができますimg

backgroundImage: url(process.env.PUBLIC_URL + "/      assets/image_location")

Webpackがアセットを認識できなくなるため、これはお勧めできません。これは、反応アプリがオフラインで開かれた場合、キャッシュミスで終了します。
Thomas Kekeisen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.