Greifen Sie in React JSX auf Requisiten in Anführungszeichen zu

295

Wie referenzieren Sie in JSX einen Wert aus propseinem angegebenen Attributwert heraus?

Beispielsweise:

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

Die resultierende HTML-Ausgabe lautet:

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

Antworten:

476

React (oder JSX) unterstützt keine Variableninterpolation innerhalb eines Attributwerts, aber Sie können jeden JS-Ausdruck in geschweiften Klammern als gesamten Attributwert einfügen. Dies funktioniert also:

<img className="image" src={"images/" + this.props.image} />
Sophie Alpert
quelle
26
Was ist mit Backtips in es6?
David Lavieri
1
@DavidLavieri Siehe Cristis Antwort stackoverflow.com/a/30061326/70345 unten.
Ian Kemp
235

Wenn Sie die es6-Vorlagenliterale verwenden möchten, benötigen Sie auch Klammern um die Häkchen:

<img className="image" src={`images/${this.props.image}`} />
Cristi
quelle
zukünftige ES6-Vorlagenliterale
zloctb
1
Die von Backticks eingeschlossene Zeichenfolge ist ein "Vorlagenliteral": developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Jon Schneider
47

Wenn Sie JSX mit Harmony verwenden, können Sie Folgendes tun:

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

Hier schreiben Sie den Wert von srcals Ausdruck.

user3089094
quelle
1
Das ist etwas, das schwer zu finden ist. und für wiederverwendbare Behälter ist dies ein Muss
Holms
2
Damit die Leute nicht mit der Erwähnung von Harmony verwechselt werden, ist dies ein Teil des ES6-Standards , während die Antwort einige Monate datiert ist, bevor sie zum Standard wurde.
10ергей Гринько
12

Anstatt Variablen und Zeichenfolgen hinzuzufügen, können Sie die ES6-Vorlagenzeichenfolgen verwenden! Hier ist ein Beispiel:

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

Verwenden Sie für alle anderen JavaScript-Komponenten in JSX Vorlagenzeichenfolgen in geschweiften Klammern. Um eine Variable zu "injizieren", verwenden Sie ein Dollarzeichen, gefolgt von geschweiften Klammern, die die Variable enthalten, die Sie injizieren möchten. Beispielsweise:

{`string ${variable} another string`}
Saahil
quelle
8

Best Practices sind das Hinzufügen einer Getter-Methode dafür:

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

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

Wenn Sie später mehr Logik haben, können Sie den Code reibungslos pflegen.

Abdennour TOUMI
quelle
2

Für Personen, die nach Antworten auf die Kartenfunktion und dynamische Daten suchen, ist hier ein funktionierendes Beispiel.

<img src={"http://examole.com/randomview/images" + each_actor['logo']} />

Dies gibt die URL als " http://examole.com/randomview/images/2/dp_pics/182328.jpg " an (zufälliges Beispiel)

RAM
quelle
1

Hinweis: In Reaktion können Sie Javascript-Ausdrücke in geschweifte Klammern setzen. Wir können diese Eigenschaft in diesem Beispiel verwenden.
Hinweis: Schauen Sie sich das folgende Beispiel einmal an:

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

  }
}
Kiran
quelle
1

Hier ist die beste Option für dynamische Klassennamen oder Requisiten. Führen Sie einfach eine Verkettung durch, wie wir es in Javascript tun.

     className={
        "badge " +
        (this.props.value ? "badge-primary " : "badge-danger ") +
        " m-4"
      }
Saad Mirza
quelle
Ich würde empfehlen, ein classnamesPaket zum Erstellen dynamischer Klassennamen zu verwenden
David Lavieri
1

Sie können verwenden

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

oder

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

oder

  render() {
         let imageUrl = this.props.image ? "images/"+this.props.image : 'some placeholder url image';
    return (
       <div>
          <img className="image" src={imageUrl} />
       </div>
    )
  }
Ali Mohammad
quelle