reactjs 我已经在react上的sentry中创建了一个项目,但是在gatsby上配置它是正确的方法吗?

4jb9z9bj  于 2023-02-04  发布在  React
关注(0)|答案(1)|浏览(98)

我正在使用哨兵跟踪崩溃报告,我已经设置了我的项目上的React,但我配置它的盖茨比,我已经添加了插件在正确的方式在gatsby.js文件,但在创建问题的任何一个组件,它是不是反映在哨兵问题,我无法找到这个问题的原因。请帮助我
我将error-boundary.js文件放在组件文件夹中,下面是该文件的代码

import React from 'react';
    import { ErrorBoundary } from '@sentry/react';
    import { Link } from 'gatsby';
    
    const FallBack = ({ error, resetError }) => (
        <div role="alert">
            <p>Something went wrong:</p>
            <pre>{error.message}</pre>
            <Link to="/" onClick={resetError}>
                <a>Try again</a>
            </Link>
        </div>
    );
    
    const ErrorBoundaryContainer = ({ children }) => {
        return <ErrorBoundary fallback={FallBack}>{children}</ErrorBoundary>;
    };
    
    export default ErrorBoundaryContainer;

然后将其导入gatsby-browser.js文件

import React from 'react'
        import ErrorBoundaryContainer from './src/components/error-boundary'
    
        export const wrapPageElement = ({ element }) => (
          <ErrorBoundaryContainer>
        {element}
          </ErrorBoundaryContainer>
    )

然后我在我的一个组件中创建一个用例来抛出测试错误,

const [toggle, toggleError] = React.useState(false);
      if (toggle) {
            console.error('console error');
            throw new Error('I crashed!');
        }
    <button type="button" onClick={() => toggleError(true)}>
                        Break the world
                    </button>
brccelvz

brccelvz1#

这里有几件事要评论:

  • wrapPageElementgatsby-browser.jsgatsby-ssr.js之间的共享API,因此如果使用它,则必须在两个文件中放置相同的代码段
  • 我假设您使用@sentry/gatsby作为依赖项,如docs suggests
  • 抛出错误的组件应该包含一个useEffect,否则,它将永远不会抛出错误。这是一个React错误,而不是Gatsby错误。
const [toggle, toggleError] = React.useState(false);

     React.useEffect(()=>{
       if (toggle) {
          console.error('console error');
          throw new Error('I crashed!');
       }
     }, [toggle])

  <button type="button" onClick={() => toggleError(!toggle)}>Break the world </button>
  • 注意:如果是一个切换,它应该改变为相反的值,不是吗?当然,你可以根据自己的意愿调整它 *

带有toggle依赖项([toggle])的useEffect钩子将在每次toggle值改变时被触发。在你的代码片段中,因为initially被设置为falseReact.useState(false)),所以你的错误不会被抛出。这就像说“好的,当我的deps值(本例中为toggle)改变时,触发我里面的东西”。

相关问题