Ответы:
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
в качестве выражения.
Вместо добавления переменных и строк вы можете использовать строки шаблона ES6! Вот пример:
<img className="image" src={`images/${this.props.image}`} />
Как и для всех других компонентов JavaScript внутри JSX, используйте строки шаблона внутри фигурных скобок. Чтобы «ввести» переменную, используйте знак доллара, а затем фигурные скобки, содержащие переменную, которую вы хотите ввести. Например:
{`string ${variable} another string`}
Для этого рекомендуется добавить метод получения:
getImageURI() {
return "images/" + this.props.image;
}
<img className="image" src={this.getImageURI()} />
Затем, если позже у вас будет больше логики, вы сможете плавно поддерживать код.
Для людей, ищущих ответы относительно функции «карта» и динамических данных, вот рабочий пример.
<img src={"http://examole.com/randomview/images" + each_actor['logo']} />
Это дает URL как « http://examole.com/randomview/images/2/dp_pics/182328.jpg » (случайный пример)
Примечание: в реакции вы можете поместить выражение 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>
);
}
}
Вот лучший вариант для Dynamic className или Props, просто сделайте конкатенацию, как мы делаем в Javascript.
className={
"badge " +
(this.props.value ? "badge-primary " : "badge-danger ") +
" m-4"
}
classnames
пакет для создания динамических classNames
ты можешь использовать
<img className="image" src=`images/${this.props.image}`>
или
<img className="image" src={'images/'+this.props.image}>
или
render() {
let imageUrl = this.props.image ? "images/"+this.props.image : 'some placeholder url image';
return (
<div>
<img className="image" src={imageUrl} />
</div>
)
}