2014-02-10 39 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> 
    ); 

    } 
}