Встановлення фонового зображення з реактивними вбудованими стилями


290

Я намагаюся отримати доступ до статичного зображення, яке потрібно використовувати в межах вбудованого backgroundImageвластивості в межах React. На жаль, я просушився, як це зробити.

Як правило, я думав, що ви зробили так:

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>тегів. Чи може хтось пояснити різницю між ними?

Приклад:

<img src={ Background } /> працює просто чудово.

Дякую!

Відповіді:


476

Фігурні дужки всередині властивості backgroundImage неправильні.

Можливо, ви використовуєте webpack разом із завантажувачем файлів зображень, тому Background має бути вже рядком: backgroundImage: "url(" + Background + ")"

Ви також можете використовувати шаблони рядків ES6, як показано нижче, для досягнення того ж ефекту:

backgroundImage: `url(${Background})`

Я мав би додати це до свого питання. У мене встановлено ширину і висоту (100% / 400 пікс. Відповідно). Проблема, що виникає, пов'язана з тим, як реагує на обробку статичних зображень, на які я вірю.
— Кріс

Чи слід уникати символів '(",') 'та пробілів у змінній Background перед конкатенацією відповідно до w3.org/TR/CSS2/syndata.html#value-def-uri ?
— qbolec

50
Повний синтаксис повинен виглядати так:style={{backgroundImage: "url(" + Background + ")"}}
— Майк

2
просто, щоб розгорнути коментар @ mike, вам потрібні подвійні фігурні дужки, оскільки для входу React є режим JS, а новий - для позначення нового об'єкта.
— Ciprian Tomoiagă

Я отримую помилку "Розділ" визначено, але ніколи не використовується "після надання цього фону імпорту з" ./background.jpg "; var sectionStyle = {width: "100%", висота: "400px", backgroundImage: url(${Background})}; Розділ класу розширює компонент {render () {return (<секція стиль = {sectionStyle}> </section>); }}
— MS Pavanan

41

Якщо ви використовуєте ES5 -

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

Якщо ви використовуєте ES6 -

backgroundImage: `url(${Background})`

В основному видалення непотрібних фігурних дужок, додаючи значення властивостям backgroundImage, буде працювати.


2
Для мене в ES6 це було backgroundImage: `url("${Background}")`, як ваш приклад ES6 не працював для мене.
— С ..

Привіт Бхарад, як би ти це зробив, якщо ти хочеш додати більше одного фонового зображення. Скажіть для двох зображень, як би ви це зробили? Спасибі
— на шляху до успіху

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"))` }}>

Зверніть увагу на два набори фігурних дужок . Перший набір призначений для входу в режим реагування, а другий - для позначення об'єкта


Що робити, якщо шлях зображення - це веб-URL, а не локальний шлях? Щось на кшталтhttps://images.com/myimage.png
— Аміну Кано

3
Гаразд, я розумію, коли ви використовуєте веб-URL. Я просто повинен написатиurl(https://images.com/myimage.png)
— Аміну Кано

4

Ви можете використовувати Literals шаблону (додається із зворотним галочкою: `... ') замість цього backgroundImageвластивості:

backgroundImage: `url(${Background})`



-1

Ви можете спробувати usimg

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

Це не рекомендується, оскільки це не дозволить webpack дізнатися про актив. Це закінчиться пропуском кешу, якщо додаток для реагування буде відкрито в автономному режимі.
— Thomas Kekeisen
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.