reactjs - React 中子组件的错误边界
问题描述
我在应用程序的根目录有一个带有错误边界的 React 应用程序。
ReactDOM.render(
<React.StrictMode>
<Provider store={store}>
<CustomErrorBoundary>
<App />
</CustomErrorBoundary>
</Provider>
</React.StrictMode>,
document.getElementById('root')
)
// CustomErrorBoundary
import { Component } from 'react'
class ErrorBoundary extends Component {
constructor() {
super()
this.state = { error: false, errorMessage: '' }
}
static getDerivedStateFromError(error) {
return { error: true, errorMessage: error.toString() }
}
componentDidCatch(error, errorInfo) {
console.log({ error, errorInfo })
}
render() {
const { error, errorMessage } = this.state
const { children } = this.props
return error ? (
<h2> There is an error {errorMessage}. {error} </h2>
) : (
children
)
}
}
export default CustomErrorBoundary
我的问题是<CustomErrorBoundary>
针对整个应用程序,因此任何后代都会抛出错误,但根应用程序会捕获,并且整个 UI 都会出现错误。
一种解决方案是为单个组件添加错误边界:
<CustomErrorBoundary>
<ChildA>
</CustomErrorBoundary>
但这会导致代码不干净。我想要使用第一个片段但只为该子组件呈现错误 UI 的东西。另外,我希望保持 redux 状态。
解决方案
推荐阅读
- android - C 中的 USB AOA ADK 问题
- angularjs - HTTP 状态 405 – 不允许的方法 不支持请求方法“GET”
- asynchronous - AWS Lambda Nodejs async.waterfall 不执行 MQTT 函数
- c++ - 如何在 arduino 程序中存储 JSON 数组?
- php - 从字符串中提取数据
- c# - 无法使用 Selenium webdrive (c#) 选择复选框
- javascript - 如何在圆形图像中使用 CSS 制作彩虹边框?
- c# - 在 Excel 互操作对象的合并行中自动调整文本。C#
- c# - ASP.NET Core MVC 路由到带有参数的 url
- arrays - 多维数组上的 Fortran 操作 - 求和示例