UNPKG

@ovine/core

Version:

Build flexible admin system with json.

71 lines (70 loc) 2.64 kB
/** * 页面渲染错误处理 */ // import { uuid } from 'amis/lib/utils/helper' import React from 'react'; import { app } from "../../app"; import logger from "../../utils/logger"; import { StyledErrorPage } from "./styled"; const log = logger.getLogger('lib:components:ErrorBoundary'); class ErrorBoundary extends React.Component { constructor(props) { super(props); this.state = { hasError: false }; } static getDerivedStateFromError(error) { // log.error('getDerivedStateFromError:', error) return { hasError: true, error }; } componentDidCatch(error, errorInfo) { log.error('componentDidCatch:', error, errorInfo); } // 每次更新清空错误状态 getSnapshotBeforeUpdate(_, prevState) { if (prevState.hasError) { this.setState({ hasError: false, error: {}, }); } return null; } // 页面内组件加载错误 renderCompError() { return React.createElement("div", null, "\u7EC4\u4EF6\u9519\u8BEF"); } // 页面加载错误 renderPageError() { const { error } = this.state; return (React.createElement(StyledErrorPage, null, React.createElement("div", { className: "inner" }, React.createElement("div", { className: "error-img" }), app.env.isRelease ? (React.createElement("span", null, "\u5F53\u524D\u9875\u9762\u53D1\u751F\u9519\u8BEF")) : (React.createElement("div", { className: "alert inline", role: "alert" }, React.createElement("h4", { className: "alert-heading" }, "\u5F53\u524D\u9875\u9762\u53D1\u751F\u9519\u8BEF"), React.createElement("p", null, (error && error.message) || '未知渲染错误'), React.createElement("hr", null), React.createElement("p", null, "\u8BF7\u6253\u5F00console\u67E5\u770B")))))); } render() { const { children, type = 'component' } = this.props; const { hasError } = this.state; if (hasError) { switch (type) { case 'page': return this.renderPageError(); default: return this.renderCompError(); } } return children; } } // const ErrorBoundaryWrap = (props: Props) => { // const { children, type } = props // // hot热更新环境不处理 error提示 // if ((module as any).hot) { // return children // } // return <ErrorBoundary type={type}>{children}</ErrorBoundary> // } export default ErrorBoundary;