Mengatur backgroundImage Dengan React Inline Styles


290

Saya mencoba mengakses gambar statis untuk digunakan dalam backgroundImageproperti inline dalam Bereaksi. Sayangnya, saya sudah kehabisan cara untuk melakukan ini.

Secara umum, saya pikir Anda baru saja melakukan hal berikut:

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

Ini berfungsi untuk <img>tag. Bisakah seseorang menjelaskan perbedaan di antara keduanya?

Contoh:

<img src={ Background } /> berfungsi dengan baik.

Terima kasih!

Jawaban:


476

Kurung kurawal di dalam properti backgroundImage salah.

Mungkin Anda menggunakan webpack bersama dengan pemuat file gambar, jadi Background seharusnya sudah menjadi String: backgroundImage: "url(" + Background + ")"

Anda juga dapat menggunakan templat string ES6 seperti di bawah ini untuk mendapatkan efek yang sama:

backgroundImage: `url(${Background})`

Saya seharusnya menambahkan itu ke pertanyaan saya. Saya memiliki set lebar dan tinggi (masing-masing 100% / 400px). Masalah yang timbul adalah karena bagaimana reaksi menangani gambar statis yang saya percaya.
Kris

Haruskah seseorang melarikan diri dari karakter '(",') 'dan spasi putih dalam variabel Latar Belakang sebelum penggabungan sesuai w3.org/TR/CSS2/syndata.html#value-def-uri ?
qbolec

50
Sintaks lengkapnya akan terlihat seperti ini:style={{backgroundImage: "url(" + Background + ")"}}
mike

2
hanya untuk memperluas komentar @ mike, Anda perlu kurung kurawal ganda karena satu untuk React untuk masuk adalah mode JS dan satu untuk menunjukkan objek baru.
Ciprian Tomoiagă

Saya mendapatkan kesalahan 'Bagian' didefinisikan tetapi tidak pernah digunakan 'setelah memberikan Latar belakang impor ini dari' ./background.jpg '; var sectionStyle = {width: "100%", tinggi: "400px", backgroundImage: url(${Background})}; Bagian kelas memperluas Komponen {render () {return (<section style = {sectionStyle}> </section>); }}
Pavanan MS

41

Jika Anda menggunakan ES5 -

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

Jika Anda menggunakan ES6 -

backgroundImage: `url(${Background})`

Pada dasarnya menghapus kurung kurawal yang tidak perlu sambil menambahkan nilai pada properti backgroundImage akan berfungsi.


2
Bagi saya di ES6 itu backgroundImage: `url("${Background}")`, karena contoh ES6 Anda tidak bekerja untuk saya.
S ..

Halo Bharad, bagaimana Anda akan melakukannya jika Anda ingin menambahkan lebih dari satu gambar latar belakang. Katakan untuk dua gambar bagaimana Anda melakukan ini? Terima kasih
Dalam perjalanan menuju sukses

37

Gaya sebaris untuk mengatur gambar layar penuh apa pun:

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

Anda juga dapat membawa gambar ke dalam komponen dengan menggunakan require()fungsi.

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

Perhatikan dua set kurung keriting . Set pertama adalah untuk masuk ke mode reaksi dan yang kedua adalah untuk menunjukkan objek


Bagaimana jika jalur gambar adalah URL web dan bukan jalur lokal? Sesuatu sepertihttps://images.com/myimage.png
Aminu Kano

3
Ok saya mengerti, saat menggunakan URL berbasis web. Saya hanya harus menulisurl(https://images.com/myimage.png)
Aminu Kano

4

Anda dapat menggunakan Literal Templat (terlampir dengan tanda centang-kembali: `...`) sebagai ganti backgroundImageproperti seperti ini:

backgroundImage: `url(${Background})`

3

coba ini:

style={{ backgroundImage: `url(require("path/image.ext"))` }}

2

Bagi saya apa yang berhasil adalah seperti ini

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

-1

Anda dapat mencoba usimg

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

Ini tidak disarankan karena akan mencegah webpack mengetahui aset tersebut. Ini akan berakhir dengan cache miss jika aplikasi reaksi dibuka offline.
Thomas Kekeisen
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.