2016-04-05 3 views
0

Ich habe einige ältere reaktivierte Komponente aktualisiert (v0.10.0), um mit der neuesten Version von react (v0.14.8) zu arbeiten.Reag-Upgrade: "Diese" Sichtbarkeit in getDefaultProps

das folgende Szenario aufgehört zu arbeiten:

// within a react component  
onClick: function() { 
    // DO SOMETHING 
} 

getDefaultProps: function() { 
    return { 
     someProp: 'prop', 
     onClick: this.onClick 
    } 
} 

Diese leicht gelöst wird, um den Code in eine anonyme Funktion zu bewegen, wie die folgenden:

getDefaultProps: function() { 
    return { 
     someProp: 'prop', 
     onClick: function() { 
      //DO SOMETHING 
     } 
    } 
} 

Meine Frage ist: Warum hat die Sichtbarkeit von "dies" auf dieser Ebene geändert und was ist der beste Weg, um diesen Code zu refactor? Und was, wenn ich "dieses" auf dieser Ebene verwenden wollte/wollte?

Irgendwelche Hilfe geschätzt, als Disclaimer bin ich ein Reaktion Super-Anfänger!

Antwort

1

The result of getDefaultProps() is shared across all instances of a component. Das bedeutet, dass das Ergebnis sich nicht auf eine bestimmte Instanz der Komponente verlassen kann. Der Grund, warum es sich geändert hat, ist wahrscheinlich auf den Leistungsvorteil des Caching zurückzuführen, obwohl ich das nicht sicher sagen kann.

Wie zum Refactoring der Code, ich bin mir nicht sicher, dass es eine Silberkugel hier ist. Aus meiner Sicht scheint das, was Sie gerade haben, ein Anti-Pattern zu sein. Requisiten sollen von Konsumenten weitergegeben werden, die keine Ahnung von der inneren Funktionsweise der Komponente haben. Daher erscheint es merkwürdig, dass ein Standardwert für eine Requisite von der inneren Funktionsweise abhängt. Ohne genau zu wissen, was Sie tun, würde ich sagen, Ihre beste Wette ist es, einfach null als Standardwert für die Requisite zu verwenden, dann überprüfen Sie den Wert zur Laufzeit, wenn Sie Zugriff auf den this Kontext haben.

handleSomeAction() { 
    if (!this.props.onClick) { 
     // DO SOMETHING 
    } 
}