2014-12-04 9 views
31

Chciałbym renderować atrybut HTML5 wejścia <select>, tak aby można było użyć selektora obrazu jquery z reakcją. Mój kod to:Jak dynamicznie ustawiać atrybuty danych HTML5 za pomocą reakcji?

var Book = React.createClass({ 
    render: function() { 
     return (
      <option data-img-src="{this.props.imageUrl}" value="1">{this.props.title}</option> 

Kwestia jest taka, że ​​chociaż {this.props.imageUrl} jest uzyskiwanie prawidłowo przekazany jako prop, nie jest renderowanie w HTML - to tylko świadczy jak {this.props.imageUrl}. Jak sprawić, aby zmienna przechodziła poprawnie do kodu HTML?

Odpowiedz

45

Nie powinieneś zawijać wyrażeń JavaScript w cudzysłowach.

<option data-img-src={this.props.imageUrl} value="1">{this.props.title}</option> 

Aby uzyskać więcej informacji, zobacz the JavaScript Expressions docs.

+12

Należy również pamiętać, że nazwa atrybutu (dane-cokolwiek) musi być pisane małymi literami. –

+0

Mam jedną wątpliwość z twojej odpowiedzi, w tym przypadku, jak możesz uzyskać wartość data-img-src w dowolnych zdarzeniach js. Jeśli potrzebujemy wartości, którą możemy uzyskać przez e.target.value, ale jeśli potrzebuję imageUrl jak będę pojąć??? – praveenkumar

+0

@praveenkumar Możesz uzyskać do nich dostęp za pomocą 'e.target.dataset'. Zobacz [dokumentacja dla zestawu danych] (https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/dataset), [dokumentacja dla atrybutów danych] (https://developer.mozilla.org/en-US/docs/Learn/HTML/Howto/Use_data_attributes) i [ten przykład CodePen] (https://codepen.io/BinaryMuse/pen/jaQVQM). –

5

Uwaga: jeśli chcesz przekazać atrybut danych do komponentu odpowiedzi, musisz traktować je trochę inaczej niż inne rekwizyty.

Nie używać camel sprawa

<Option data-img-src='value' ... /> 

a następnie w składniku, ponieważ z kresek, trzeba zapoznać się z rekwizytem w cudzysłowach.

// @flow 
class Option extends React.Component { 

    props: { 
    'data-img-src': string 
    } 

A kiedy się do niego później, aby nie używać składni dot

render() { 
    return (
     <option data-img-src={this.props['data-img-src']} >...</option> 
    ) 
    } 
} 
Powiązane problemy