prevState setState ?
, prevState
, setState
prevState . . , prevState .
:
prevState
this.state
, , , .
, , , prevState
, , setState
, js prevState
, , prevState != this.state
, setState
, 1.
setState
- async
, , setState
, setState
, prevState
, prevState
this.state
.
, , , , prevState
this.state
.
class App extends React.Component{
constructor(props)
{
super(props);
this.state = {
counter : 1
};
}
increment = () =>{
this.setState((prevState , props) => {
console.log("in first");
console.log(prevState);
console.log(this.state);
if(prevState == this.state)
{
console.log("in first prevState == this.state");
}
return {
counter : prevState.counter+1
}
} , ()=>{
console.log("done updating first");
});
console.log("after first");
this.setState((prevState, props) => {
console.log("in second");
console.log(this.state);
console.log(prevState);
if (prevState == this.state) {
console.log("in second prevState == this.state");
}
return {
counter: prevState.counter + 1
}
} , () =>{
console.log("done updating second");
});
console.log("after second");
}
render(){
return (
<div>
<span>{this.state.counter}</span>
<br/>
<button onClick={this.increment} >increment</button>
</div>
)
}
}
"after first"
"after second"
"in first"
▶Object {counter: 1}
▶Object {counter: 1}
"in first prevState == this.state"
"in second"
▶Object {counter: 1}
▶Object {counter: 2}
"done updating first"
"done updating second"
, console.log
https://codesandbox.io/s/k325l485mr
, . return return setState
return {
counter: prevState.counter + 1
}
return {
counter: this.state.counter + 1
}
, , 1 , , 2 setState
, , prevState
, this.state
, -
this.setState((prevState) => ({ counter: prevState.counter + 1 }));