我使用 Javascript 已经有几年了,根据我目前对事件循环的了解,我正在努力理解为什么React 文档中的这个测试方法有效。有人能够准确地分解每一步发生的情况吗?对我来说,这在测试中起作用似乎很神奇:
await act(async () => {
render(<User id="123" />, container);
});
// expect something
Run Code Online (Sandbox Code Playgroud)
该组件如下所示(复制以防链接被弃用):
function User(props) {
const [user, setUser] = useState(null);
async function fetchUserData(id) {
const response = await fetch("/" + id);
setUser(await response.json());
}
useEffect(() => {
fetchUserData(props.id);
}, [props.id]);
if (!user) {
return "loading...";
}
return (
<details>
<summary>{user.name}</summary>
<strong>{user.age}</strong> years old
<br />
lives in {user.address}
</details>
);
}
Run Code Online (Sandbox Code Playgroud)
渲染上没有隐式或显式返回发生,那么 act 如何知道等待组件中发生的异步内容(获取等)?
对我来说,这更有意义:
await act(async () => render(<User id="123" />, …Run Code Online (Sandbox Code Playgroud)