2017-09-24 8 views
0

Ich versuche, den Zustand zu setzen und dann eine andere Funktion mit dem aktuellen Zustand aufrufen, nur nachdem Sie es eingestellt haben.this.setState mit nicht funktioniert

Ich habe diese Art von Code

this.setState({ 
     candidates : diCandi 
    },()=>{ 
     this.createDataSource(this.state) 
     console.log("The state is=>",this.state); 
    }); 

Ich möchte nur aktualisiert this.createDataSource(this.state) mit dem Staat rufen i. Es funktioniert nicht Ich frage mich warum. Gibt es etwas, das ich falsch mache

Infact, wenn ich den Zustand abmelde. Ich sehe den Code nie in den Protokollen.

+1

_nicht funktioniert_ ist nicht genug Information. Bitte geben Sie Ihrem Problem mehr Kontext. Wenn Sie irgendwelche Fehler oder seltsames Verhalten erhalten, fügen Sie es bitte zu Ihrer Frage hinzu. – bennygenel

+1

Das sollte funktionieren, der Punkt des Rückrufs ist, dass es nicht ausgelöst wird, bis der Status aktualisiert wird (da das asynchron sein kann). Bitte aktualisieren Sie Ihre Frage mit einem ** runnable ** [mcve], das das Problem demonstriert, indem Sie Stack Snippets (die '[<>]' Symbolleistenschaltfläche) verwenden. Stack Snippets unterstützen Reagieren, einschließlich JSX; [hier geht's] (http://meta.stackoverflow.com/questions/338537/). –

+0

klären, was "nicht funktioniert". Sie können versuchen, von 'createDataSource' zu ​​loggen und zu sehen, ob der Status neu ist (was es sein sollte). Sie müssen also herausfinden, was nicht funktioniert. – Panther

Antwort

1

class App extends React.Component{ 
 
    constructor(props){ 
 
    super(props) 
 
    this.state = { candidates: "no candidates" } 
 
    } 
 
    
 
    shouldComponentUpdate(){ 
 
    return false; 
 
    } 
 
    
 
    buttonClick(e){ 
 
    this.setState({candidates: "diCandi"},() => console.log("updated")) 
 
    } 
 
    
 
    render(){ 
 
    return(
 
    <div> 
 
     <button onClick={this.buttonClick.bind(this)}>set candidates</button> 
 
     <b>{this.state.candidates}</b> 
 

 
     </div> 
 
    ) 
 
    } 
 
} 
 

 
const MOUNT_NODE = document.getElementById('container') 
 
ReactDOM.render(<App />, MOUNT_NODE)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script> 
 
<div id="container">

Der Code sollte zuvor von Sagar, der Rückruf bei this.setState() tritt nur in so genannten arbeiten, nachdem der Zustand gesetzt worden ist. Der Rückruf funktioniert auch, wenn shouldComponentUpdate zurückkehrt falsch

-2

versuchen Sie dies:

this.setState({ 
    candidates : diCandi 
}).then(()=>{ 
    this.createDataSource(this.state) 
    console.log("The state is=>",this.state); 
}); 

this.setState() ist ein Asynchron-Funktion.

+0

Danke, aber dint Arbeit für mich – henrybbosa

1

Sie alle den Staat zu createDataSource senden können Sie tun

this.setState({ 
    candidates : diCandi 
},()=>{ 
    this.createDataSource(this.state.candidates) 
    console.log("The state is=>",this.state.candidates); 
}); 

auch ist es empfehlenswert, den Zustand von createDataSource Methode für den Zugriff auf nicht als params Senden

this.setState({ 
    candidates : diCandi 
},()=>{ 
    this.createDataSource() 
    console.log("The state is=>",this.state.candidates); 
}); 

dann in createDataSource

createDataSource() { 
    this.state.candidates 
    .... rest of code 
} 
Verwandte Themen