리 액트 인라인 스타일로 backgroundImage 설정


290

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>태그입니다. 누군가 둘 사이의 차이점을 설명 할 수 있습니까?

예:

<img src={ Background } /> 잘 작동합니다.

감사합니다!

답변:


476

backgroundImage 속성 안의 중괄호가 잘못되었습니다.

이미지 파일 로더와 함께 webpack을 사용하고 있으므로 Background는 이미 문자열이어야합니다. backgroundImage: "url(" + Background + ")"

ES6 문자열 템플릿을 아래와 같이 사용하여 동일한 효과를 얻을 수도 있습니다.

backgroundImage: `url(${Background})`

나는 그것을 내 질문에 추가했을 것입니다. 너비와 높이가 설정되어 있습니다 (각각 100 % / 400px). 발생하는 문제는 반응이 내가 믿는 정적 이미지를 처리하는 방식 때문입니다.
Kris

w3.org/TR/CSS2/syndata.html#value-def-uri에 따라 연결하기 전에 배경 변수에서 '( ",') '및 공백 문자를 이스케이프 처리해야합니까 ?
qbolec

50
전체 구문은 다음과 같아야합니다.style={{backgroundImage: "url(" + Background + ")"}}
mike

2
@ mike의 주석을 확장하려면 React가 들어가기위한 하나는 JS 모드이고 하나는 새 객체를 나타 내기 때문에 이중 중괄호가 필요합니다.
Ciprian Tomoiagă

'./background.jpg'에서 가져 오기 배경을 제공 한 후 '섹션'이 정의되었지만 사용되지 않았습니다 '라는 오류가 발생합니다. var sectionStyle = {너비 : "100 %", 높이 : "400px", backgroundImage : url(${Background})}; 클래스 Sections 확장 컴포넌트 {render () {return (<section style = {sectionStyle}> </ section>); }}
Pavanan MS

41

ES5를 사용하는 경우-

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

ES6를 사용하는 경우-

backgroundImage: `url(${Background})`

backgroundImage 속성 작업에 값을 추가하는 동안 불필요한 중괄호를 기본적으로 제거하면 작동합니다.


2
ES6에서는 저에게 backgroundImage: `url("${Background}")`ES6 예제가 효과가 없었기 때문에이었습니다.
S ..

Bharad 님, 하나 이상의 배경 이미지를 추가하려면 어떻게 하시겠습니까? 두 가지 이미지를 어떻게 말합니까? 감사
성공하는 길에

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)
Aminu Kano 4

4

다음 backgroundImage과 같은 속성 대신 템플릿 리터럴 (back-tick :`...`로 묶음)을 사용할 수 있습니다 .

backgroundImage: `url(${Background})`

3

이 시도:

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

2

나를 위해 일한 것은 다음과 같습니다.

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

-1

당신은 usimg를 시도 할 수 있습니다

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

이것은 웹팩이 자산을 알지 못하게하기 때문에 권장되지 않습니다. 반응 앱이 오프라인으로 열리면 캐시 미스로 끝납니다.
토마스 케 케이슨
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.