我没有找到任何文件或示例来解释这个问题,但从我的理解来说,要使用suspense,您必须向父组件添加Suspense边界,并从子组件中删除async/await并进行懒加载。但是,当移除async/await时,它会破坏类型,因为所有内容都是一个promise。
例如,将
值也无法被输入类型,因为
有了Suspense。
例如,将
await (await fetch('some-api')).json();
更改为fetch('some-api').json()
会导致错误 .json不是一个函数
。值也无法被输入类型,因为
const data: MyData = fetchData()
会出错,因为fetchData
返回的是 Promise<MyData>
。有了Suspense。
function Parent() {
return (
<Suspense fallback={<Spinner />}>
<Child />
</Suspense>
);
}
function Child() {
const data: MyData[] = fetchData(); //Error: Type 'Promise<MyData[]>' is missing the following properties from type 'MyData[]': length, pop, push, concat, and 29 more
return (
<div>{data.map(d => <p>d.name</p>)}</data>
);
}
在使用Suspense之前
function Child() {
const [data, setData] = useState<MyData[]>([]);
useEffect(() => {
async function loadData() {
setData(await fetchData());
}
loadData();
}, []);
if (!data.length) return <Spinner />;
return (
<div>{data.map(d => <p>d.name</p>)}</data>
);
}