Accédez aux accessoires entre guillemets dans React JSX


295

Dans JSX, comment référencez-vous une valeur propsde l'intérieur d'une valeur d'attribut entre guillemets?

Par exemple:

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

La sortie HTML résultante est:

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

Réponses:


476

React (ou JSX) ne prend pas en charge l'interpolation de variable à l'intérieur d'une valeur d'attribut, mais vous pouvez mettre n'importe quelle expression JS entre accolades comme valeur d'attribut entière, donc cela fonctionne:

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

26
qu'en est-il des backtips dans es6?
David Lavieri

1
@DavidLavieri Voir la réponse de Cristi stackoverflow.com/a/30061326/70345 ci-dessous.
Ian Kemp


47

Si vous utilisez JSX avec Harmony, vous pouvez le faire:

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

Ici, vous écrivez la valeur de srccomme expression.


1
c'est quelque chose qui est difficile à trouver. et pour les conteneurs réutilisables, c'est un incontournable
holms

2
Juste pour que les gens ne se confondent pas avec la mention d'Harmony, cela fait partie de la norme ES6 , tandis que la réponse est datée de quelques mois avant qu'elle ne devienne une norme.
Сергей Гринько

12

Au lieu d'ajouter des variables et des chaînes, vous pouvez utiliser les chaînes de modèle ES6! Voici un exemple:

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

Comme pour tous les autres composants JavaScript à l'intérieur de JSX, utilisez des chaînes de modèle à l'intérieur des accolades. Pour «injecter» une variable, utilisez un signe dollar suivi d'accolades contenant la variable que vous souhaitez injecter. Par exemple:

{`string ${variable} another string`}

8

Les meilleures pratiques consistent à ajouter une méthode getter pour cela:

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

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

Ensuite, si vous avez plus de logique plus tard, vous pouvez gérer le code en douceur.


2

Pour les personnes qui recherchent des réponses par rapport à la fonction de «cartographie» et aux données dynamiques, voici un exemple pratique.

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

Cela donne l'URL comme " http://examole.com/randomview/images/2/dp_pics/182328.jpg " (exemple aléatoire)


1

Remarque: En réaction, vous pouvez mettre l'expression javascript entre accolades. Nous pouvons utiliser cette propriété dans cet exemple.
Remarque: jetez un œil à l'exemple ci-dessous:

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

Voici la meilleure option pour Dynamic className ou Props, faites juste une concaténation comme nous le faisons en Javascript.

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

Je recommanderais d'utiliser le classnamespackage pour construire des classNames dynamiques
David Lavieri

1

vous pouvez utiliser

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

ou

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

ou

  render() {
         let imageUrl = this.props.image ? "images/"+this.props.image : 'some placeholder url image';
    return (
       <div>
          <img className="image" src={imageUrl} />
       </div>
    )
  }
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.