2016-07-14 9 views
2

Ich habe dieses div erhalten:Reagieren: Element Attribut Methode

<div className="item #{ @test() }" data-value="1"> 

und whant Zugang in Methode, um Daten-Attribut zu erhalten:

test: -> 
console.log ($(this).data("value")) 

Aber ich bekomme diese anstelle des Elements:

Constructor {props: Object, context: Object, refs: Object, updater: Object, state: Object…} 
+0

In Ihrem Code haben Sie einen Fehler. Wenn Sie eine Funktion im ClassName-Attribut aufrufen, bezieht sich das Objekt 'this' auf Ihre React-Komponente, nicht jedoch auf das gerenderte Element. – steppefox

+0

@steppefox Das stimmt, aber der wahre Fehler ist, dass Sie nie auf die Attribute eines gerenderten Elements zugreifen müssen, wenn Sie React verwenden. –

Antwort

2

Behandeln Sie Ihre DOM-Knoten nicht als Quelle der Wahrheit.

Die Form eines DOM-Knotens in React sollte immer sein, abgeleitet von aus den Daten, die über Requisiten an eine Komponente übergeben werden, oder als Teil des internen Status beibehalten werden.

Angenommen, dass das Verfahren für die Komponente machen, die das Tag wie folgt aussieht macht:

return (
    <div className={`item ${this.test()}`} data-value="1"></div> 
); 

In diesem Fall wir hartzucodieren Daten-Wert-Attribut als "1". Das ist nicht besonders nützlich, es ist wahrscheinlicher, dass wir einen Wert aus den Requisiten der Komponente verwenden.

const { value = 1 } = props; 

return (
    <div className={`item ${this.test()}`} data-value={value}></div> 
); 

Jetzt können wir die Klassennamen programmatisch mit diesem Wert bauen, anstatt zu versuchen, in den DOM-Knoten hook it out zurück zu bekommen.

const { value = 1 } = props; 
return (
    <div className={`item ${this.test(value)}` data-value={value}></div> 
); 
Verwandte Themen