React JSX에서 따옴표 안의 소품에 액세스


295

JSX에서 props인용 된 속성 값 내부에서 값을 어떻게 참조 합니까?

예를 들면 다음과 같습니다.

<img className="image" src="images/{this.props.image}" />

결과 HTML 출력은 다음과 같습니다.

<img class="image" src="images/{this.props.image}">

답변:




47

Harmony와 함께 JSX를 사용하는 경우 다음을 수행 할 수 있습니다.

<img className="image" src={`images/${this.props.image}`} />

여기서는 src표현으로서의 가치를 쓰고 있습니다.


1
이것은 찾기 어려운 것입니다. 재사용 가능한 용기의 경우 이것은 반드시 알아야합니다
holms

2
사람들이 하모니 언급과 혼동하지 않도록 ES6 표준 의 일부이며 답변은 표준이되기 몇 달 전입니다.
Сергей Гринько

12

변수와 문자열을 추가하는 대신 ES6 템플릿 문자열을 사용할 수 있습니다! 예를 들면 다음과 같습니다.

<img className="image" src={`images/${this.props.image}`} />

JSX 내부의 다른 모든 JavaScript 구성 요소는 중괄호 안에 템플릿 문자열을 사용하십시오. 변수를 "주입"하려면 주입하려는 변수를 포함하는 중괄호 뒤에 달러 기호를 사용하십시오. 예를 들면 다음과 같습니다.

{`string ${variable} another string`}

8

모범 사례는이를 위해 getter 메소드를 추가하는 것입니다.

getImageURI() {
  return "images/" + this.props.image;
}

<img className="image" src={this.getImageURI()} />

그런 다음 나중에 더 많은 논리가 있으면 코드를 부드럽게 유지할 수 있습니다.



1

참고 : 반응으로 자바 스크립트 표현식을 중괄호 안에 넣을 수 있습니다. 이 예제에서이 속성을 사용할 수 있습니다.
참고 : 아래 예제를 한 번 살펴보십시오.

class LoginForm extends React.Component {

  constructor(props) {
    super(props);

    this.state = {i:1};
  }

  handleClick() {
    this.setState(prevState => ({i : prevState.i + 1}));

    console.log(this.state.j);  
  }


  render() {

    return (
      <div>
        <p onClick={this.handleClick.bind(this)}>Click to change image</p>
        <img src={'images/back'+ this.state.i+'.jpg'}/>
      </div>
      );

  }
}

1

다음은 Dynamic className 또는 Props에 대한 최상의 옵션입니다. Javascript에서와 마찬가지로 연결을 수행하십시오.

     className={
        "badge " +
        (this.props.value ? "badge-primary " : "badge-danger ") +
        " m-4"
      }

내가 사용의 권 해드립니다 classnames동적 클래스 네임을 구축하기위한 패키지
데이비드 Lavieri에게

1

당신이 사용할 수있는

<img className="image" src=`images/${this.props.image}`>

또는

<img className="image" src={'images/'+this.props.image}>

또는

  render() {
         let imageUrl = this.props.image ? "images/"+this.props.image : 'some placeholder url image';
    return (
       <div>
          <img className="image" src={imageUrl} />
       </div>
    )
  }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.