Accedi agli oggetti di scena tra virgolette in React JSX


295

In JSX, come si fa a fare riferimento a un valore propsdall'interno di un valore di attributo tra virgolette?

Per esempio:

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

L'output HTML risultante è:

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

Risposte:




47

Se stai usando JSX con Harmony, puoi farlo:

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

Qui stai scrivendo il valore di srccome espressione.


1
questo è qualcosa che è difficile da trovare. e per contenitori riutilizzabili questo è un must-know
holms il

2
Solo così le persone non si confondono con la menzione di Harmony, questa è una parte dello standard ES6 , mentre la risposta è datata pochi mesi prima che diventasse uno standard.
Сергей Гринько,

12

Invece di aggiungere variabili e stringhe, puoi usare le stringhe modello ES6! Ecco un esempio:

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

Come per tutti gli altri componenti JavaScript all'interno di JSX, utilizzare stringhe di modelli all'interno di parentesi graffe. Per "iniettare" una variabile usa un segno di dollaro seguito da parentesi graffe contenenti la variabile che desideri iniettare. Per esempio:

{`string ${variable} another string`}

8

Le migliori pratiche sono aggiungere il metodo getter per questo:

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

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

Quindi, se hai più logica in seguito, puoi mantenere il codice senza problemi.



1

Nota: in reazione puoi inserire l'espressione javascript all'interno della parentesi graffa. Possiamo usare questa proprietà in questo esempio.
Nota: dai un'occhiata all'esempio seguente:

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

Ecco la migliore opzione per Dynamic className o Props, fai solo un po 'di concatenazione come facciamo in Javascript.

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

Consiglio di utilizzare il classnamespacchetto per la creazione di classNames dinamici
David Lavieri,

1

Puoi usare

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

o

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

o

  render() {
         let imageUrl = this.props.image ? "images/"+this.props.image : 'some placeholder url image';
    return (
       <div>
          <img className="image" src={imageUrl} />
       </div>
    )
  }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.