2017-11-24 1 views
2

Ich versuche, den Wert von stateValue mit dem Wert von i in setInterval aber es ändert nur den Wert von i zu aktualisieren und nicht die stateValue in setInterval aktualisieren.setState arbeiten nicht in setInterval

fun1 =() => { 
    let i = 0; 
    let intervalId = setInterval(() => { 
    console.log("i:", i); 
    this.setState({ 
     stateValue: i 
    }); 

    i = i + 1; 
    if (i === 3) { 
     i = 0; 
    } 
    console.log("stateValue:", this.state.stateValue); 
    }, 5000); 
}; 
+0

Kontrolle dieses. https://stackoverflow.com/questions/47385492/react-how-to-add-new-element-in-array-type-state?answertab=active#tab-top – Dhaval

+0

setState ist eine asynchrone Methode. Das bedeutet gleich nach dem Schreiben von setState, können Sie nicht erwarten, dass der Zustand sofort geändert wird – Dhaval

+0

danke seine Arbeit –

Antwort

3

FROM DOC :

setState() nicht immer sofort die Komponente aktualisieren. Es kann Batch oder verzögern das Update bis später. Dies macht das Lesen this.state direkt nach dem Aufruf setState() eine potenzielle Falle. Verwenden Sie stattdessen componentDidUpdate oder setState Rückruf (setState(updater, callback)), von denen beide garantiert werden, nachdem das Update angewendet wurde. Wenn Sie den Status basierend auf dem vorherigen -Status festlegen müssen, lesen Sie das unten stehende Argument updater.

sollten Sie diese verwenden, um die immidiate Zustand Aktualisierungswert zu erhalten:

this.setState({ 
    stateValue: i 
},() => { 
    console.log("stateValue:", this.state.stateValue); 
}); 
+0

danke Sir, es funktioniert jetzt –