React JSX: доступ к реквизиту в кавычках
в JSX, как вы ссылаетесь на значение из props
изнутри цитируемого значения атрибута?
например:
<img className="image" src="images/{this.props.image}" />
результирующий вывод HTML:
<img class="image" src="images/{this.props.image}">
8 ответов
React (или JSX) не поддерживает интерполяцию переменных внутри значения атрибута, но вы можете поместить любое выражение JS внутри фигурных скобок как целое значение атрибута, поэтому это работает:
<img className="image" src={"images/" + this.props.image} />
Если вы хотите использовать литералы шаблона es6, вам также нужны фигурные скобки вокруг галочек:
<img className="image" src={`images/${this.props.image}`} />
Если вы используете JSX с Harmony, вы можете сделать следующее:
<img className="image" src={`images/${this.props.image}`} />
здесь вы пишете значение src
как выражение.
рекомендуется добавить метод getter для этого:
getImageURI() {
return "images/" + this.props.image;
}
<img className="image" src={this.getImageURI()} />
затем, если у вас будет больше логики позже, вы можете поддерживать код плавно.
вместо добавления переменных и строк вы можете использовать строки шаблона ES6! Вот пример:
<img className="image" src={`images/${this.props.image}`} />
Как и для всех других компонентов JavaScript внутри JSX, используйте строки шаблонов внутри фигурных скобок. Чтобы "ввести" переменную, используйте знак доллара, а затем фигурные скобки, содержащие переменную, которую вы хотите ввести. Например:
{`string ${variable} another string`}
для людей, ищущих ответы 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" (случайный пример)
Примечание: в react вы можете поместить выражение 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>
);
}
}
вот лучший вариант для динамического имени класса или реквизита, просто сделайте некоторую конкатенацию, как мы делаем в Javascript.
className={
"badge " +
(this.props.value ? "badge-primary " : "badge-danger ") +
" m-4"
}