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.