2014-02-10 8 views
194

В JSX, как вы ссылаетесь на значение от props внутри значения цитируемого атрибута?React JSX: Access Props в котировках

Например:

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

Результирующий выходной HTML является:

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

ответ

339

React (или JSX) не поддерживает переменную интерполяции внутри значения атрибута, но вы можете поместить любое выражение JS внутри фигурных скобок как целое значение атрибута, поэтому это работает:

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

Это работает отлично - спасибо за быстрый ответ. – cantera

+18

Что касается подсказок в es6? –

+0

Я пробовал это решение, и он перенес меня мимо ошибки, которую я получал. Но теперь я получаю сообщение об ошибке, которое говорит, что это «зарезервированное слово». Я знаю, что это так, поэтому я его использую, lol @Sophie Alpert –

37

Если вы используете используя JSX с Harmony, вы можете сделать это:

<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 –

1

для людей, ищет ответы WRT на «карту» функцию и динамические данные, здесь рабочий пример.

<img src={"http://examole.com/randomview/images" + each_actor['logo']} /> 

Это дает URL как "http://examole.com/randomview/images/2/dp_pics/182328.jpg" (случайный пример)

4

Лучшие практики, чтобы добавить метод получения для этого:

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> 
    ); 

    } 
}