【发布时间】:2022-01-10 15:29:05
【问题描述】:
我有一个像这样结构的组件,我的 ErrorBoundary 包装了我的 Suspense 元素。
function App() {
return (
<ErrorBoundary fallback={<h2>Could not fetch cities.</h2>}>
<Suspense fallback={<div>Loading..</div>}>
<MyList />
</Suspense>
</ErrorBoundary>
);
}
MyList 组件包括一个SWR 数据获取钩子,如下所示:
const { data } = useSwr(`/api/mydata`, fetcher, {
suspense: true,
});
我的 fetcher 方法抛出如下错误:
const rsp = await fetch(url);
if (rsp.ok) {
return await rsp.json();
} else {
const MyError = function (message, status) {
this.message = `${message} from url ${url} status code:${status}`;
this.status = status;
};
throw new MyError(rsp.statusText, rsp.status);
}
}
当错误发生时,我不知道如何让我的 UI 显示抛出的值(即 MyError 类中的内容)
【问题讨论】:
-
你能用你的 ErrorBoundary 类更新代码吗?
-
可能最棘手的部分是如何触发要检查的错误,特别是因为代码使用
async\await。检查我的答案,让我知道这是否适合您。 -
我认为下面的答案不能解决我的问题(我的问题不够清楚)。我想在我在 m App 类中定义的后备组件中包含实际错误。我会更新问题
-
嗯,好的,请包含一些对
ErrorBoundary的引用,所以如果是从库中导入的,那么实现代码或一些导入。 -
您会想使用github.com/bvaughn/react-error-boundary#readme 和我的回答stackoverflow.com/questions/70621393/… 可能会对您有所帮助。如果没有您对
ErrorBoundary的实施,很难看出您可能做错了什么。并且,请阅读kentcdodds.com/blog/…
标签: reactjs swr react-suspense