React JSX: access Props in Quotes

W JSX, jak odwoływać się do wartości z {[2] } wewnątrz cytowanej wartości atrybutu?

Na przykład:

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

Wynikowe wyjście HTML to:

<img class="image" src="images/{this.props.image}">
Author: Dmitry Shvedov, 2014-02-10

8 answers

React (lub JSX) nie obsługuje interpolacji zmiennej wewnątrz wartości atrybutu, ale możesz umieścić dowolne wyrażenie JS wewnątrz nawiasów klamrowych jako całą wartość atrybutu, więc działa to:

<img className="image" src={"images/" + this.props.image} />
 390
Author: Sophie Alpert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-16 09:45:44

Jeśli chcesz używać literałów szablonów es6, potrzebujesz szelek wokół znaków kleszcza:

<img className="image" src={`images/${this.props.image}`} />
 192
Author: Cristi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-22 18:39:53

Jeśli używasz JSX z Harmony, możesz to zrobić:

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

Tutaj zapisujesz wartość src jako wyrażenie.

 39
Author: user3089094,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-09 19:00:40

Najlepsze praktyki polegają na dodaniu do tego metody gettera:

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

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

Następnie, jeśli masz więcej logiki później, można utrzymać kod płynnie.

 5
Author: Abdennour TOUMI,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-20 19:58:41

Zamiast dodawać zmienne i ciągi znaków, możesz użyć ciągów szablonów ES6! Oto przykład:

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

Podobnie jak wszystkie inne komponenty JavaScript wewnątrz JSX, użyj łańcuchów szablonów wewnątrz nawiasów klamrowych. Aby "wstrzyknąć" zmienną, użyj znaku dolara, a następnie nawiasów klamrowych zawierających zmienną, którą chcesz wstrzyknąć. Na przykład:

{`string ${variable} another string`}
 3
Author: Saahil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-30 21:44:41

Dla ludzi, szukających odpowiedzi w. r. t do funkcji "map" i dynamicznych danych, oto działający przykład.

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

To daje adres URL jako " http://examole.com/randomview/images/2/dp_pics/182328.jpg " (przykład losowy)

 1
Author: Ram,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-18 22:35:04

Uwaga: w reaccie możesz umieścić wyrażenie javascript wewnątrz nawiasów klamrowych. Możemy użyć tej właściwości w tym przykładzie.
Uwaga: spójrz na poniższy przykład:

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

  }
}
 0
Author: Kiran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-24 12:54:46

Tutaj jest najlepsza opcja dla Dynamic className lub Props, po prostu zrób trochę konkatenacji, tak jak robimy to w Javascript.

     className={
        "badge " +
        (this.props.value ? "badge-primary " : "badge-danger ") +
        " m-4"
      }
 0
Author: Saad Mirza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-06 07:25:02