代码如下:
import React from 'react';
import { useState, useEffect } from 'react';
export default function App() {
const [arr, setArr] = useState([0]);
useEffect(() => {
console.log(arr);
}, [arr]);
const handleClick = () => {
Promise.resolve()
.then(() => {
setArr(prevState => [...prevState, 1]);
})
.then(() => {
Promise.resolve()
.then(() => {
setArr(prevState => [...prevState, 2]);
})
.then(() => {
setArr(prevState => [...prevState, 5]);
})
.then(() => {
setArr(prevState => [...prevState, 6]);
});
})
.then(() => {
setArr(prevState => {
setArr(prevState => [...prevState, 4]);
return [...prevState, 3];
});
})
.catch(e => {
console.log(e);
});
};
return (
<>
<button onClick={handleClick}>change</button>
</>
);
}
点击按钮后,控制台的结果显示为
(1) [0]
(2) [0, 1]
(5) [0, 1, 2, 3, 4]
(6) [0, 1, 2, 3, 4, 5]
(7) [0, 1, 2, 3, 4, 5, 6]
想知道为啥结果不是[0, 1, 2, 5, 6, 3, 4],以及如何在 Promise 链中正确调用 setState,感谢大家的指点