React中setState学习总结
<p>react中setState方法到底是异步还是同步,其实这个是分在什么<strong>条件</strong>下是异步或者同步。</p><p>1.先来回顾一下react组件中改变state的几种方式:</p>
<div class="cnblogs_code">
<pre>import React, { Component } from 'react'<span style="color: rgba(0, 0, 0, 1)">
class Index extends Component {
state</span>=<span style="color: rgba(0, 0, 0, 1)">{
count:</span>1<span style="color: rgba(0, 0, 0, 1)">
}
test1 </span>= () =><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 通过回调函数的形式</span>
<span style="color: rgba(0, 0, 255, 1)">this</span>.setState((state,props)=><span style="color: rgba(0, 0, 0, 1)">({
count:state.count</span>+1<span style="color: rgba(0, 0, 0, 1)">
}));
console.log(</span>'test1 setState()之后',<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.count);
}
test2 </span>= () =><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 通过对象的方式(注意:此方法多次设置会合并且只调用一次!)</span>
<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setState({
count:</span><span style="color: rgba(0, 0, 255, 1)">this</span>.state.count+1<span style="color: rgba(0, 0, 0, 1)">
});
console.log(</span>'test2 setState()之后',<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.count);
}
test3 </span>= () =><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 不能直接修改state的值,此方法强烈不建议!!!因为不会触发重新render</span>
<span style="color: rgba(0, 0, 255, 1)">this</span>.state.count += 1<span style="color: rgba(0, 0, 0, 1)">;
}
test4 </span>= () =><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 在第二个callback拿到更新后的state</span>
<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setState({
count:</span><span style="color: rgba(0, 0, 255, 1)">this</span>.state.count+1<span style="color: rgba(0, 0, 0, 1)">
},()</span>=>{<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 在状态更新且页面更新(render)后执行</span>
console.log('test4 setState()之后',<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.count);
});
}
render() {
console.log(</span>'render'<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> (
</span><div>
<h1>currentState:{<span style="color: rgba(0, 0, 255, 1)">this</span>.state.count}</h1>
<button onClick={<span style="color: rgba(0, 0, 255, 1)">this</span>.test1}>测试1</button>
<button onClick={<span style="color: rgba(0, 0, 255, 1)">this</span>.test2}>测试2</button>
<button onClick={<span style="color: rgba(0, 0, 255, 1)">this</span>.test3} style={{color:'red'}}>测试3</button>
<button onClick={<span style="color: rgba(0, 0, 255, 1)">this</span>.test4}>测试4</button>
</div>
<span style="color: rgba(0, 0, 0, 1)"> )
}
}
export </span><span style="color: rgba(0, 0, 255, 1)">default</span> Index;</pre>
</div>
<p>2.setState()更新状态是异步还是同步:</p>
<p><strong>需要判断执行setState的位置</strong></p>
<p><strong>异步:</strong>在react控制的回调函数中:生命周期钩子/react事件监听回调</p>
<div class="cnblogs_code">
<pre>import React, { Component } from 'react'<span style="color: rgba(0, 0, 0, 1)">
class Index extends Component {
state</span>=<span style="color: rgba(0, 0, 0, 1)">{
count:</span>1<span style="color: rgba(0, 0, 0, 1)">
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
react事件监听回调中,setState()是异步状态
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
update1 </span>= () =><span style="color: rgba(0, 0, 0, 1)"> {
console.log(</span>'update1 setState()之前',<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.count);
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.setState((state,props)=><span style="color: rgba(0, 0, 0, 1)">({
count:state.count</span>+1<span style="color: rgba(0, 0, 0, 1)">
}));
console.log(</span>'update1 setState()之后',<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.count);
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
react生命周期钩子中,setState()是异步更新状态
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
componentDidMount() {
console.log(</span>'componentDidMount setState()之前',<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.count);
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.setState((state,props)=><span style="color: rgba(0, 0, 0, 1)">({
count:state.count</span>+1<span style="color: rgba(0, 0, 0, 1)">
}));
console.log(</span>'componentDidMount setState()之后',<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.count);
}
render() {
console.log(</span>'render'<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> (
</span><div>
<h1>currentState:{<span style="color: rgba(0, 0, 255, 1)">this</span>.state.count}</h1>
<button onClick={<span style="color: rgba(0, 0, 255, 1)">this</span>.update1}>测试1</button>
<button onClick={<span style="color: rgba(0, 0, 255, 1)">this</span>.update2}>测试2</button>
</div>
<span style="color: rgba(0, 0, 0, 1)"> )
}
}
export </span><span style="color: rgba(0, 0, 255, 1)">default</span> Index;</pre>
</div>
<p><strong>同步:</strong>非react控制的异步回调函数中:定时器回调/原生事件监听回调/Promise</p>
<div class="cnblogs_code">
<pre>import React, { Component } from 'react'<span style="color: rgba(0, 0, 0, 1)">
class Index extends Component {
state</span>=<span style="color: rgba(0, 0, 0, 1)">{
count:</span>1<span style="color: rgba(0, 0, 0, 1)">
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
定时器回调
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
update1 </span>= () =><span style="color: rgba(0, 0, 0, 1)"> {
setTimeout(()</span>=><span style="color: rgba(0, 0, 0, 1)">{
console.log(</span>'setTimeout setState()之前',<span style="color: rgba(0, 0, 255, 1)">this</span>.state.count);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">1</span>
<span style="color: rgba(0, 0, 255, 1)">this</span>.setState((state,props)=><span style="color: rgba(0, 0, 0, 1)">({
count:state.count</span>+1<span style="color: rgba(0, 0, 0, 1)">
}));
console.log(</span>'setTimeout setState()之后',<span style="color: rgba(0, 0, 255, 1)">this</span>.state.count);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">2</span>
<span style="color: rgba(0, 0, 0, 1)"> });
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
原生事件回调
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
update2 </span>= () =><span style="color: rgba(0, 0, 0, 1)"> {
const h1 </span>= <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.refs.count;
h1.onclick </span>= () =><span style="color: rgba(0, 0, 0, 1)"> {
console.log(</span>'onClick setState()之前',<span style="color: rgba(0, 0, 255, 1)">this</span>.state.count);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">1</span>
<span style="color: rgba(0, 0, 255, 1)">this</span>.setState((state,props)=><span style="color: rgba(0, 0, 0, 1)">({
count:state.count</span>+1<span style="color: rgba(0, 0, 0, 1)">
}));
console.log(</span>'onClick setState()之后',<span style="color: rgba(0, 0, 255, 1)">this</span>.state.count);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">2</span>
<span style="color: rgba(0, 0, 0, 1)"> }
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
Promise回调
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
update3 </span>= () =><span style="color: rgba(0, 0, 0, 1)"> {
Promise.resolve().then(value</span>=><span style="color: rgba(0, 0, 0, 1)">{
console.log(</span>'Promise setState()之前',<span style="color: rgba(0, 0, 255, 1)">this</span>.state.count);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">1</span>
<span style="color: rgba(0, 0, 255, 1)">this</span>.setState((state,props)=><span style="color: rgba(0, 0, 0, 1)">({
count:state.count</span>+1<span style="color: rgba(0, 0, 0, 1)">
}));
console.log(</span>'Promise setState()之后',<span style="color: rgba(0, 0, 255, 1)">this</span>.state.count);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">2</span>
<span style="color: rgba(0, 0, 0, 1)"> });
}
render() {
console.log(</span>'render'<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> (
</span><div>
<h1 ref='count'>currentState:{<span style="color: rgba(0, 0, 255, 1)">this</span>.state.count}</h1>
<button onClick={<span style="color: rgba(0, 0, 255, 1)">this</span>.update1}>测试1</button>
<button onClick={<span style="color: rgba(0, 0, 255, 1)">this</span>.update2}>测试2</button>
<button onClick={<span style="color: rgba(0, 0, 255, 1)">this</span>.update3}>测试3</button>
</div>
<span style="color: rgba(0, 0, 0, 1)"> )
}
}
export </span><span style="color: rgba(0, 0, 255, 1)">default</span> Index;</pre>
</div>
<p>3.setState()多次调用的问题:</p>
<p><strong>异步的setState()</strong></p>
<p>(1)多次调用,处理方法:</p>
<p>setState({}):合并更新一次状态,只调用一次render()更新界面,多次调用会合并为一个,后面的值会覆盖前面的值。</p>
<p>setState(fn):更新多次状态,只调用一次render()更新界面,多次调用<strong>不会</strong>合并为一个,后面的值会覆盖前面的值。</p>
<div class="cnblogs_code">
<pre>import React, { Component } from 'react'<span style="color: rgba(0, 0, 0, 1)">
class Index extends Component {
state</span>=<span style="color: rgba(0, 0, 0, 1)">{
count:</span>1<span style="color: rgba(0, 0, 0, 1)">
}
update1 </span>= () =><span style="color: rgba(0, 0, 0, 1)"> {
console.log(</span>'update1 setState()之前',<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.count);
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.setState((state,props)=><span style="color: rgba(0, 0, 0, 1)">({
count:state.count</span>+1<span style="color: rgba(0, 0, 0, 1)">
}));
console.log(</span>'update1 setState()之后',<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.count);
console.log(</span>'update1 setState()之前2',<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.count);
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.setState((state,props)=><span style="color: rgba(0, 0, 0, 1)">({
count:state.count</span>+1<span style="color: rgba(0, 0, 0, 1)">
}));
console.log(</span>'update1 setState()之后2',<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.count);
}
update2 </span>= () =><span style="color: rgba(0, 0, 0, 1)"> {
console.log(</span>'update2 setState()之前',<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.count);
</span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setState({
count:</span><span style="color: rgba(0, 0, 255, 1)">this</span>.state.count+1<span style="color: rgba(0, 0, 0, 1)">
});
console.log(</span>'update2 setState()之后',<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.count);
console.log(</span>'update2 setState()之前2',<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.count);
</span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setState({
count:</span><span style="color: rgba(0, 0, 255, 1)">this</span>.state.count+1<span style="color: rgba(0, 0, 0, 1)">
});
console.log(</span>'update2 setState()之后2',<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.count);
}
update3 </span>= () =><span style="color: rgba(0, 0, 0, 1)"> {
console.log(</span>'update3 setState()之前',<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.count);
</span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setState({
count:</span><span style="color: rgba(0, 0, 255, 1)">this</span>.state.count+1<span style="color: rgba(0, 0, 0, 1)">
});
console.log(</span>'update3 setState()之后',<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.count);
console.log(</span>'update3 setState()之前2',<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.count);
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.setState((state,props)=><span style="color: rgba(0, 0, 0, 1)">({
count:state.count</span>+1<span style="color: rgba(0, 0, 0, 1)">
}));</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 这里需要注意setState传参为函数模式时,state会确保拿到的是最新的值</span>
console.log('update3 setState()之后2',<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.count);
}
update4 </span>= () =><span style="color: rgba(0, 0, 0, 1)"> {
console.log(</span>'update4 setState()之前',<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.count);
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.setState((state,props)=><span style="color: rgba(0, 0, 0, 1)">({
count:state.count</span>+1<span style="color: rgba(0, 0, 0, 1)">
}));
console.log(</span>'update4 setState()之后',<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.count);
console.log(</span>'update4 setState()之前2',<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.count);
</span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setState({
count:</span><span style="color: rgba(0, 0, 255, 1)">this</span>.state.count+1<span style="color: rgba(0, 0, 0, 1)">
});</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 这里需要注意的是如果setState传参为对象且在最后,那么会与之前的setState合并</span>
console.log('update4 setState()之后2',<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.count);
}
render() {
console.log(</span>'render'<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> (
</span><div>
<h1>currentState:{<span style="color: rgba(0, 0, 255, 1)">this</span>.state.count}</h1>
<button onClick={<span style="color: rgba(0, 0, 255, 1)">this</span>.update1}>测试1</button>
<button onClick={<span style="color: rgba(0, 0, 255, 1)">this</span>.update2}>测试2</button>
<button onClick={<span style="color: rgba(0, 0, 255, 1)">this</span>.update3}>测试3</button>
<button onClick={<span style="color: rgba(0, 0, 255, 1)">this</span>.update4}>测试4</button>
</div>
<span style="color: rgba(0, 0, 0, 1)"> )
}
}
export </span><span style="color: rgba(0, 0, 255, 1)">default</span> Index;</pre>
</div>
<p>(2)如何得到setState异步更新后的状态数据:</p>
<p>在setState()的callback回调函数中</p>
<p>4.react中常见的setState面试题(setState执行顺序)</p>
<div class="cnblogs_code">
<pre>import React, { Component } from 'react'
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> setState执行顺序</span>
<span style="color: rgba(0, 0, 0, 1)">class Index extends Component {
state</span>=<span style="color: rgba(0, 0, 0, 1)">{
count:</span>0<span style="color: rgba(0, 0, 0, 1)">
}
componentDidMount() {
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.setState({count:<span style="color: rgba(0, 0, 255, 1)">this</span>.state.count+1<span style="color: rgba(0, 0, 0, 1)">});
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.setState({count:<span style="color: rgba(0, 0, 255, 1)">this</span>.state.count+1<span style="color: rgba(0, 0, 0, 1)">});
console.log(</span><span style="color: rgba(0, 0, 255, 1)">this</span>.state.count);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 2 => 0</span>
<span style="color: rgba(0, 0, 255, 1)">this</span>.setState(state=>({count:state.count+1<span style="color: rgba(0, 0, 0, 1)">}));
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.setState(state=>({count:state.count+1<span style="color: rgba(0, 0, 0, 1)">}));
console.log(</span><span style="color: rgba(0, 0, 255, 1)">this</span>.state.count);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 3 => 0</span>
setTimeout(() =><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.setState({count:<span style="color: rgba(0, 0, 255, 1)">this</span>.state.count+1<span style="color: rgba(0, 0, 0, 1)">});
console.log(</span>'setTimeout',<span style="color: rgba(0, 0, 255, 1)">this</span>.state.count);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 10 => 6</span>
<span style="color: rgba(0, 0, 255, 1)">this</span>.setState({count:<span style="color: rgba(0, 0, 255, 1)">this</span>.state.count+1<span style="color: rgba(0, 0, 0, 1)">});
console.log(</span>'setTimeout',<span style="color: rgba(0, 0, 255, 1)">this</span>.state.count);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 12 => 7</span>
<span style="color: rgba(0, 0, 0, 1)"> });
Promise.resolve().then(value</span>=><span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.setState({count:<span style="color: rgba(0, 0, 255, 1)">this</span>.state.count+1<span style="color: rgba(0, 0, 0, 1)">});
console.log(</span>'Promise',<span style="color: rgba(0, 0, 255, 1)">this</span>.state.count);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 6 => 4</span>
<span style="color: rgba(0, 0, 255, 1)">this</span>.setState({count:<span style="color: rgba(0, 0, 255, 1)">this</span>.state.count+1<span style="color: rgba(0, 0, 0, 1)">});
console.log(</span>'Promise',<span style="color: rgba(0, 0, 255, 1)">this</span>.state.count);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 8 => 5</span>
<span style="color: rgba(0, 0, 0, 1)"> });
}
render() {
console.log(</span>'render',<span style="color: rgba(0, 0, 255, 1)">this</span>.state.count);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 1 => 0// 4 => 3 // 5 => 4 // 7 => 5 // 9 => 6 // 11 => 7</span>
<span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> (
</span><div>
<h1>currentState:{<span style="color: rgba(0, 0, 255, 1)">this</span>.state.count}</h1>
<button onClick={<span style="color: rgba(0, 0, 255, 1)">this</span>.update1}>测试1</button>
<button onClick={<span style="color: rgba(0, 0, 255, 1)">this</span>.update2}>测试2</button>
<button onClick={<span style="color: rgba(0, 0, 255, 1)">this</span>.update3}>测试3</button>
<button onClick={<span style="color: rgba(0, 0, 255, 1)">this</span>.update4}>测试4</button>
</div>
<span style="color: rgba(0, 0, 0, 1)"> )
}
}
export </span><span style="color: rgba(0, 0, 255, 1)">default</span> Index;</pre>
</div>
<p><strong>总结:react中setState()更新状态的2种写法</strong></p>
<p>1)setState(updater,)</p>
<p>updater:为返回stateChange对象的函数:(state,props)=>stateChange,接收的<strong>state和props都保证为最新</strong>的</p>
<p>2)setState(stateChange,)</p>
<p>stateChange为对象,callback是可选的回调函数,在<strong>状态更新且界面更新</strong>后才执行</p>
<p><strong>注意:</strong></p>
<p><strong>对象是函数方式的简写方式</strong></p>
<p>如果新状态不依赖于原状态,则使用对象方式;</p>
<p>如果新状态依赖于原状态,则使用函数方式;</p>
<p>如果需要在setState()后获取最新的状态数据,在第二个callback函数中获取</p><br><br>
来源:https://www.cnblogs.com/abc-x/p/12051364.html
頁:
[1]