标准答案

  1. React 渲染错误可以通过 Error Boundary 捕获并展示降级 UI,同时上报错误信息。
  2. 接口错误应在请求层统一归一化,并带上 requestId、状态码、业务码和页面上下文。
  3. 全局错误可以监听 window error、unhandledrejection 和资源加载失败,但要注意噪声过滤。
  4. 用户行为追踪应记录关键路径,例如曝光、点击、提交、失败和重试,而不是采集所有细节。
  5. 上报数据要脱敏,避免上传 token、手机号、邮箱、完整请求体等敏感信息。

题目解析

这道题的重点是可定位和合规。上报不是越多越好,能把一次问题和用户操作链路串起来才有价值。

Error Boundary 不能捕获异步回调、事件处理器和服务端错误,所以还需要请求层和全局监听配合。

生产环境要考虑采样、去重、版本号、source map、用户会话和隐私边界。

代码示例

下面用 Error Boundary 在降级展示的同时上报组件错误。

TSX
class AppErrorBoundary extends React.Component<Props, { hasError: boolean }> {
  state = { hasError: false }

  static getDerivedStateFromError() {
    return { hasError: true }
  }

  componentDidCatch(error: Error, info: React.ErrorInfo) {
    reportError(error, { componentStack: info.componentStack })
  }

  render() {
    return this.state.hasError ? <ErrorFallback /> : this.props.children
  }
}

常见误区

  • 只接入 Error Boundary,就以为所有错误都能被捕获。
  • 上报完整请求参数和用户输入,造成隐私或合规风险。
  • 埋点没有事件命名规范和上下文字段,后续无法分析。

作者信息