2014-12-04 9 views
31

Ich möchte ein HTML5-Attribut einer <select> Eingabe rendern, so dass ich jquery Bildauswahl mit reagieren kann. Mein Code ist:Wie setze ich HTML5-Datenattribute dynamisch mit react?

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

Das Problem ist, dass, obwohl {this.props.imageUrl} richtig als prop geführt zu werden, es ist nicht in der HTML-Rendering - es macht genauso {this.props.imageUrl}. Wie kann ich die Variable korrekt in den HTML-Code einfügen lassen?

Antwort

45

Sie sollten JavaScript-Ausdrücke nicht in Anführungszeichen setzen.

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

Werfen Sie einen Blick auf the JavaScript Expressions docs für weitere Informationen.

+12

Beachten Sie auch, dass die Attributnamen (Data-was auch immer) muss klein geschrieben werden. –

+0

Ich habe einen Zweifel von Ihrer Antwort, für diesen Fall, wie Sie diesen Daten-img-src Wert in jedem js Ereignisse erhalten können. Wenn wir einen Wert benötigen, können wir durch e.target.value erhalten, aber wenn ich imageUrl brauche, wie ich will bekomme das ??? – praveenkumar

+0

@praveenkumar Sie können auf sie über 'e.target.dataset' zugreifen. Siehe [Dokumentation für Dataset] (https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/dataset), die [Dokumentation für Datenattribute] (https://developer.mozilla.org/de-DE/docs/Lernen/HTML/Howto/Use_data_attributes) und [dieses CodePen-Beispiel] (https://codepen.io/BinaryMuse/pen/jaQVQM). –

5

Hinweis - Wenn Sie ein Datenattribut an eine React-Komponente übergeben möchten, müssen Sie diese ein wenig anders handhaben als andere Requisiten.

Sie können Kamel Fall

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

Und dann in der Komponente verwendet werden, da der Striche, müssen Sie in Anführungszeichen an der Stütze beziehen.

// @flow 
class Option extends React.Component { 

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

Und wenn Sie es später beziehen, können Sie nicht verwenden die Punktsyntax

render() { 
    return (
     <option data-img-src={this.props['data-img-src']} >...</option> 
    ) 
    } 
} 
Verwandte Themen