可以使用useEffect的第二个参数来实现此目的。将需要等待的所有useState的状态值作为依赖项传递给useEffect。当所有依赖项的值都发生变化时,useEffect将被触发。例如:使用两个useState,count和name。使用useEffect来在其中一个或两个状态发生变化时更新页面标题。 让我们看看如何等待两个钩子完成状态更新:
import React, { useState, useEffect } from "react";
function App() {
const [count, setCount] = useState(0);
const [name, setName] = useState("");
useEffect(() => {
document.title = `Count: ${count}, Name: ${name}`;
}, [count, name]);
const handleButtonClick = async () => {
await setCount(count + 1);
await setName("John");
return (
<p>{`Count: ${count}`}</p>
<p>{`Name: ${name}`}</p>
<button onClick={handleButtonClick}>Update</button>
export default App;
在上面的示例中,useEffect钩子的第二个参数是[count, name]。只有当这两个状态中的任何一个发生变化时,useEffect才会触发。handleButtonClick函数使用异步/等待将两个useState更新。因为useState调用返回一个Promise,所以await可以用于等待setState在内部完成状态更新。这确保了在执行useEffect之前,所有useState钩子的状态都已成功更新。