2017-02-21 1 views
3

Ich habe eine Komponente, wie diese Reagieren Nativ: Access Component Zustand innerhalb einer statischen Funktion

export class A extends Component{ 
    constructor(props){ 
    this.state = { 
     scene:0 
    } 
    } 
    static changeScene(scene){ 
    this.setState({scene:scene}) 
    } 
} 

Ich möchte

definierte Änderung Szene rufen von überall A.changeScene(sceneVal) mit die Szene in A. ändern das Problem ist, ich kann 't access this.setState Ich habe diesen Fehler Unhandled JS Exception: this.setState is not a function.

Ich bin sicher, dass die A-Komponente bereits montiert ist. Ich kann diesen Fehler umgehen, indem eine globale Variable var self = null; und innerhalb des Konstruktors self = this im Konstruktor definieren, aber ich möchte einen besseren Weg, um dieses Problem rosolve

+0

können Sie sicher sein, dass es nur eine einzige Instanz der Komponente 'A' ist? Wenn ja, dann scheint 'this 'einer statischen Variablen zuzuordnen. Wenn nicht, dann müssen Sie die Frage neu überdenken. –

+0

Ich bin mir nicht sicher, ob statische Funktionen 'binden' müssen, um den Kontext zu behalten. Sie könnten es versuchen – jose920405

+0

statische Funktionen haben nie Zugriff auf das 'This' Ihre nicht statischen Funktionen haben Zugriff auf. Denken Sie über nicht-statische Methoden nach, wie jede Instanz es hat, und denken Sie über statische Methoden nach, wie es die Klasse hat. –

Antwort

1

Der Grund hierfür ist, wenn Sie static function dann ein static Methode verwenden, nicht in der Lage sein, Zugang this innerhalb dieser Funktion. Sie sollten die Verwendung der Funktion static vermeiden. Static Methoden haben keinen Zugriff auf die Werte, Eigenschaften und Methoden, die für eine Instanz der class unter Verwendung von this definiert sind.

prüfen Sie diesen Artikel: http://odetocode.com/blogs/scott/archive/2015/02/02/static-members-in-es6.aspx

+0

definiert eine globale var self = das ist eine schlechte Idee als? es wird nicht mehr als eine Instanz von A sein. Danke :) – Coyote

+1

Sie können die globale Variable verwenden, aber ich denke, es wird besser sein, einige Architektur wie Redux/Fluss zu verwenden, können Sie leicht diese Art von Aufgabe zu tun. Lassen Sie uns von jeder Komponente sagen, dass Sie etwas in A ändern wollen, übergeben Sie den Wert, um die Änderungen in Comp A zu speichern. –

Verwandte Themen