【发布时间】:2020-03-21 07:56:14
【问题描述】:
我正在开发的应用程序使用错误边界,我对它很陌生。我们还使用 React Router,我想在出现一些特定错误的情况下使用它来重定向到主页(而不是直接跳入错误边界)。
例如,如果 datasetId 不存在,我想重定向到仪表板组件,但这种情况总是直接导致安装错误边界。我不确定如何“覆盖”它,或者在错误边界执行其操作之前捕获错误并重定向。
这里有一些相关的代码来说明这个例子:
路线:
const Dataset = () => {
return (
<Switch>
<Route
name="data-snapshot"
path="/datasets/:datasetId/versions/:snapshotId"
component={DatasetQuery}
/>
<Route
name="data-dataset"
path="/datasets/:datasetId/"
component={DatasetQuery}
/>
</Switch>
)
}
路由中的组件
const DatasetQuery = ({ match }) => (
<ErrorBoundary error={error} subject={'error in dataset page'}>
<DatasetHook
datasetId={match.params.datasetId}
draft={!match.params.snapshotId}
/>
</ErrorBoundary>
)
还有一个错误边界:
const DatasetHook = ({ datasetId, draft }) => {
const {
data: { dataset },
loading,
error,
} = useQuery(draft ? getDraftPage : getDatasetPage, {
variables: { datasetId },
})
if (loading) {
return <Spinner text="Loading Dataset" active />
} else {
if (error) Sentry.captureException(error)
return (
<ErrorBoundary error={error} subject={'error in dataset page'}>
<DatasetQueryContext.Provider
value={{
datasetId,
}}>
<DatasetPage dataset={dataset} />
<FilesSubscription datasetId={datasetId} />
</DatasetQueryContext.Provider>
</ErrorBoundary>
)
}
}
假设 datasetId 不存在,并且有人去了无效路线。如何重定向到不同的组件而不是加载错误边界?
【问题讨论】:
标签: reactjs error-handling jsx react-router-dom