Доступ к реквизитам внутри кавычек в React JSX

В JSX, как вы ссылаетесь на значение из props внутри значения атрибута в кавычках?

Например:

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

В результате получается HTML-вывод:

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

Ответ 1

React (или JSX) не поддерживает переменную интерполяцию внутри значения атрибута, но вы можете поместить любое выражение JS внутри фигурных скобок как целое значение атрибута, поэтому это работает:

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

Ответ 2

Если вы хотите использовать литералы шаблона es6, вам также понадобятся фигурные скобки:

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

Ответ 3

Если вы используете JSX с Harmony, вы можете сделать это:

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

Здесь вы пишете значение src как выражение.

Ответ 4

Вместо добавления переменных и строк вы можете использовать строки шаблона ES6! Вот пример:

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

Как и для всех других компонентов JavaScript внутри JSX, используйте строки шаблона внутри фигурных скобок. Чтобы "ввести" переменную, используйте знак доллара, а затем фигурные скобки, содержащие переменную, которую вы хотите ввести. Например:

{'string ${variable} another string'}

Ответ 5

Лучшие методы - добавить метод getter для этого:

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

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

Затем, если у вас больше логики, вы можете поддерживать код плавно.

Ответ 6

Для людей, ища ответы w.r.t на функцию "map" и динамические данные, вот рабочий пример.

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

Это дает URL как " http://examole.com/randomview/images/2/dp_pics/182328.jpg" (случайный пример)

Ответ 7

Примечание: в реакции вы можете поместить выражение javascript в фигурную скобку. Мы можем использовать это свойство в этом примере.
Примечание: взгляните на приведенный ниже пример:

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

  }
}

Ответ 8

Вот лучший вариант для Dynamic className или Props, просто сделайте конкатенацию, как мы делаем в Javascript.

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