在React JSX中访问引号内的道具


294

在JSX中,如何props从带引号的属性值内部引用值?

例如:

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

产生的HTML输出为:

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

Answers:




47

如果您将JSX与Harmony结合使用,则可以执行以下操作:

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

在这里,您正在编写src表达式的值。


1
这是很难找到的东西。对于可重复使用的容器,这是必不可少的
holms

2
只是为了使人们不会对提及Harmony感到困惑,这是ES6标准的一部分,而答案的发布日期为该标准成为标准之前的几个月。
СергейГринько

12

除了添加变量和字符串,您还可以使用ES6模板字符串!这是一个例子:

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

至于JSX中的所有其他JavaScript组件,请在花括号内使用模板字符串。要“注入”变量,请使用美元符号,然后在花括号中包含要注入的变量。例如:

{`string ${variable} another string`}

8

最佳做法是为此添加getter方法:

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

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

然后,如果以后有更多逻辑,则可以平稳地维护代码。



1

注意:在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>
      );

  }
}

1

这是动态className或Props的最佳选择,就像我们在Javascript中一样进行一些串联。

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

我建议使用classnames用于构建动态className的包
David Lavieri

1

您可以使用

<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>
    )
  }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.