2014-02-10 40 views
194

在JSX中,如何从引用的属性值中引用props的值?React JSX:在报价中访问道具

例如:

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

产生的HTML输出是:

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

回答

339

阵营(或JSX)不支持的属性值内插变量,但你可以把任何JS表达里面大括号作为整个属性值,所以这个作品:

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

完美的作品 - 感谢您的快速回复。 – cantera

+18

es6中的backtips呢? –

+0

我试过这个解决方案,它让我感动了我过去的错误。但是现在我得到一个错误,说'this'是一个保留字。我就像我知道这是,这就是为什么我使用它,哈哈@Sophie Alpert –

37

如果你是使用JSX与和谐,你可以这样做:

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

在这里,你正在写一个表达式的src值。

+0

这是很难找到的东西。对于可重用容器,这是必须知道的 – holms

165

如果你想使用ES6模板的文字,你需要花括号周围的刻度线,以及:

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

将来ES6模板文字 – zloctb

+0

反引号括起来的字符串是一个“模板文字”:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals –

4

最佳实践是添加getter方法为:

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

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

然后,如果你有更多的逻辑以后,你可以顺利地维护代码。

0

注意:在反应中,您可以将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> 
    ); 

    } 
}