使用异步功能测试钩子时出现以下错误;
不变违反 对象作为React子对象无效(找到:[object Promise])。
async function Test () {
const data = await fetch('https://jsonplaceholder.typicode.com/posts/42');
const json = await data.json();
const id = json.id;
return id;
}
...
function App() {
return (
<div className="App">
<h1>React Hooks Example</h1>
<Suspense fallback={<LoadingMessage />}>
<Test />
</Suspense>
</div>
);
}
https://codesandbox.io/s/4w2yzvyro7
如何解决此错误
答案 0 :(得分:0)
<Suspense>
应该以非常特定的方式使用。它将暂停lazy
组件的渲染,并按原样渲染其他类型的组件。
Test
不是lazy
组件,而是async
函数,它返回promise对象而不是React元素,因此Test
不是有效的React组件。
lazy
组件旨在呈现从延迟加载的组件的默认导入。基本上,lazy
组件应该返回具有default
属性的对象的承诺,该对象包含有效的React组件。
它可以用作:
const Test = lazy(async () => {
const data = await fetch('https://jsonplaceholder.typicode.com/posts/42');
const json = await data.json();
const id = json.id;
return { default: (props) => <div>{id}</div> };
});
...
<Suspense fallback={<LoadingMessage />}>
<Test />
</Suspense>
请注意,由于其主要用途,lazy
组件无法接受参数,如果Test
具有props,它们将被传递给async
函数返回的组件。 / p>