放置React Error Boundary组件的理想位置



我最近试用了React的错误边界。根据react-的文档

错误边界的粒度取决于您。您可以包装顶级路由组件,以向用户显示"出现问题"消息,就像服务器端框架经常处理崩溃一样。您还可以将单个窗口小部件封装在错误边界中,以保护它们不破坏应用程序的其余部分。

封装顶级路由很好,可以解决我的目的,但一个组件的中断会使其他正常工作的组件变得无用,并用错误边界的回退UI替换所有组件。

例如,我有一个顶级路由组件<Component1 />并且它呈现了另外四个子分量——<Component2 /><Component3 /><Component4 /><Component5 />

现在,我的子组件有条件渲染,如果我想单独使用错误边界,我需要用错误边界包装所有的条件渲染。我不喜欢。

我还有一个问题:错误边界是否捕获了像ComponentDidMount这样的(子组件的(生命周期挂钩中引起的错误?

例如

cont Component1 = () => {
return (
<ErrorBoundary> 
<Component2 />
<Component3 />
<Component4 />
<Component5 />
</ErrorBoundary>
)
}

这个ErrorBoundary是否捕获了像Component2的componentDidMount这样的生命周期挂钩中的错误?

就像您引用的文本一样,如果您想呈现所有"工作"的子组件,但用回退替换不工作的子组件时,您需要用错误边界包裹每个子组件。对此没有真正的解决办法。也许可以使用更方便的模式,例如渲染道具或高阶组件,但效果是一样的。

放置"错误边界"的"理想位置"取决于如果分支失败,您希望回退渲染在组件树中的何处启动。也许你有一个对整个应用程序非常关键的组件——在这种情况下,也许只有一个顶级错误边界就足够了,因为渲染其余部分毫无意义。也许你有一个不那么重要的组件-在这种情况下,将其封装在错误边界中,因为应用程序的其他部分应该可以工作,即使没有它


错误边界是否捕获(子组件的(生命周期挂钩(如ComponentDidMount(中引起的错误?

是。顶级错误边界将捕获由子组件生成的错误,但整个Component1渲染将替换为回退渲染。

错误边界只捕捉通过React的生命周期方法(如componentDidMount(触发的错误,包括render方法。错误边界不会捕捉事件处理程序或任何异步代码(如fetch(内部触发的错误。

最新更新