React JSXの引用符内の小道具にアクセスする


295

JSXではprops、引用符で囲まれた属性値の中から値をどのように参照しますか?

例えば:

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

結果のHTML出力は次のとおりです。

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

回答:


476

React(またはJSX)は属性値内の変数補間をサポートしていませんが、JS式を属性値全体として中括弧内に置くことができるため、次のように機能します。

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

26
es6のバックチップはどうですか?
David Lavieri 2016年

1
@DavidLavieri 以下のCristiの回答stackoverflow.com/a/30061326/70345を参照してください。
Ian Kemp


47

HarmonyでJSXを使用している場合は、次のようにすることができます。

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

ここでsrcは式の値を書いています。


1
これは見つけるのが難しいものです。そして、再利用可能なコンテナの場合、これは
必知です

2
Harmonyについて言及することで混乱しないように、これはES6標準の一部ですが、回答は標準になる数か月前の日付です。
СергейГринько

12

変数と文字列を追加する代わりに、ES6テンプレート文字列を使用できます。次に例を示します。

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

JSX内の他のすべてのJavaScriptコンポーネントについては、中括弧内のテンプレート文字列を使用します。変数を「注入」するには、ドル記号に続けて、注入する変数を含む中括弧を使用します。例えば:

{`string ${variable} another string`}

8

ベストプラクティスは、そのためのゲッターメソッドを追加することです。

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

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

そうすれば、後でさらにロジックがあれば、コードをスムーズに維持できます。



1

注:反応では、中括弧内にJavaScript式を置くことができます。この例では、このプロパティを使用できます。
注:以下の例を見てください。

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

これは、ダイナミックclassNameまたはPropsに最適なオプションです。JavaScriptで行うように、いくつかの連結を行います。

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

classnames動的なclassNamesの構築にはパッケージの使用をお勧めします
David 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.