javascript – getDerivedStateFromError和componentDidCatch之间的区别是什么

前端之家收集整理的这篇文章主要介绍了javascript – getDerivedStateFromError和componentDidCatch之间的区别是什么前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我从 here了解到的:

componentDidCatch:

>总是在浏览器中调用
当DOM已经更新时,在“提交阶段”期间调用>
>应该用于错误报告之类的事情

getDerivedStateFromError:

在服务器端呈现期间也会调用>
当DOM尚未更新时,在“提交阶段”之前调用>
>应该用于渲染回退UI

不过,我对某些事情感到有些困惑:

>他们是否都捕获了相同类型的错误?或每个生命周期
会抓到不同的错误吗?
>我应该总是使用两者(可能在同一个“错误捕捉”组件中)吗?
>“使用componentDidCatch进行错误恢复不是最佳选择,因为它会强制后备UI始终同步呈现”这有什么问题?

解决方法

问题中的陈述是正确的.

are they both catching the same type of errors? or each lifecycle will catch the different error?

他们在不同的阶段捕获相同的错误.以前只使用componentDidCatch就可以了:

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

componentDidCatch() {
    this.setState({ hasError: true });
  }

做同样的事情,但componentDidCatch将不会在服务器端呈现.

should I always use both (in the same “error-catching” component possibly)?

你可以使用两者. the documentation的一个例子表明:

class ErrorBoundary extends React.Component {
  state = { hasError: false };

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

  componentDidCatch(error,info) {
    logComponentStackToMyService(info.componentStack);
  }

  render() {
    if (this.state.hasError) {
      return <h1>Something went wrong.</h1>;
    }

    return this.props.children; 
  }
}

在这种情况下,责任在它们之间分配. getDerivedStateFromError是唯一有用的东西,即在发生错误时更新状态,而componentDidCatch提供副作用,并且可以在需要时访问此组件实例.

“using componentDidCatch for error recovery is not optimal because it forces the fallback UI to always render synchronously” what’s wrong with that?

新的React版本旨在实现更高效的异步呈现.正如在the comment中也提到的那样,同步渲染不是后备UI的一个大问题,因为它可以被视为边缘情况.

原文链接:https://www.f2er.com/js/150774.html

猜你在找的JavaScript相关文章