ProHoster > Blog > Administración > Monitorización remota de erros de Sentry nas aplicacións frontend de React
Monitorización remota de erros de Sentry nas aplicacións frontend de React
Estamos explorando usar Sentry con React.
Este artigo forma parte dunha serie que comeza co informe de erros de Sentry mediante un exemplo: Часть 1.
Implementación de React
Primeiro necesitamos engadir un novo proxecto Sentry para esta aplicación; dende o sitio web de Sentry. Neste caso escollemos React.
Implementaremos de novo os nosos dous botóns, Ola e Erro, nunha aplicación con React. Comezamos creando a nosa aplicación de inicio:
npx create-react-app react-app
Despois importamos o paquete Sentry:
yarn add @sentry/browser
e inicialízao:
react-app/src/index.js
...
import * as Sentry from '@sentry/browser';
const RELEASE = '0.1.0';
if (process.env.NODE_ENV === 'production') {
Sentry.init({
dsn: 'https://[email protected]/1289887',
release: RELEASE,
});
}
...
Observacións:
Durante o desenvolvemento, temos outros mecanismos para supervisar problemas, como a consola, polo que só activamos Sentry para as versións de produción
A continuación implementamos os nosos botóns Ola e Erro e engadímolos á aplicación:
react-app/src/Hello.js
import React, { Component } from 'react';
import * as Sentry from '@sentry/browser';
export default class Hello extends Component {
state = {
text: '',
};
render() {
const { text } = this.state;
return (
<div>
<button
onClick={this.handleClick}
>
Hello
</button>
<div>{text}</div>
</div>
)
}
handleClick = () => {
this.setState({
text: 'Hello World',
});
try {
throw new Error('Caught');
} catch (err) {
if (process.env.NODE_ENV !== 'production') {
return;
}
Sentry.captureException(err);
}
}
}
Podemos probar Sentry cunha compilación de produción introducindo:
yarn build
e desde o cartafol de compilación introduza:
npx http-server -c-1
O problema co que nos atopamos inmediatamente é que os rexistros de erros de Sentry fan referencia aos números de liña do lote reducido; non moi útil.
O servizo Sentry explica isto tirando dos mapas de orixe para o paquete reducido despois de recibir un erro. Neste caso estamos executando desde localhost (non accesible polo servizo Sentry).
Solucións (Mapas Fontes)
A solución a este problema é executar a aplicación desde un servidor web público. Un simple botón de resposta para usar o servizo de páxinas de GitHub (gratuíto). Os pasos a usar normalmente son os seguintes:
Copia o contido do cartafol construír á carpeta docs no directorio raíz do repositorio.
Acende Páxinas GitHub no repositorio (de GitHub) para usar o cartafol docs mestre ramas
Enviar cambios a GitHub
Nota: despois de descubrir o que teño que usar crear-crear-aplicación función de páxina de inicio para iniciar a aplicación. Reduciuse a engadir o seguinte a package.json:
Este informe de erros non pode ser máis claro, BEN FEITO.
Ilustración de erros non contabilizados
Do mesmo xeito, imos facer clic no botón erro.
Con un erro que aparece como este:
Mellor manexo dos erros non contabilizados (renderizado)
Introdución de límites de erro
Un erro de JavaScript en parte da interface de usuario non debería romper toda a aplicación. Para resolver este problema para os usuarios de React, React 16 introduce un novo concepto chamado "límites de erro".
Os límites de erro son compoñentes de React que detectan erros de JavaScript en calquera parte da súa árbore de compoñentes fillos, rexistran eses erros e representan unha IU alternativa en lugar da árbore de compoñentes que fallou. Os límites dos erros detectan erros durante a representación, nos métodos de ciclo de vida e nos construtores de toda a árbore que están debaixo deles.
...
Novo comportamento para erros non detectados
Este cambio é significativo. A partir de React 16, os erros que non foron detectados por ningún límite de erro provocarán que se desmonte toda a árbore de compoñentes de React.
Unha aclaración importante que me levou un tempo antes de darme conta é que o comportamento anterior só funciona con erros lanzados no método de renderizado (ou máis probable nalgún dos métodos de ciclo de vida). Por exemplo, usar límites de erro non serviría de nada co noso botón erro; este erro estaba no manejador de clics.
Imos crear un exemplo de erro de renderizado e, a continuación, use os límites de erro para xestionar o erro con máis gracia.
Cando preme o botón, Reaccionar mostrarase bandeira.rebentada.falsa, que xera un erro
Sen un límite de erro, desmontarase toda a árbore de compoñentes
Despois escribimos o noso código de límite de erro (usa o novo método de ciclo de vida componentDidCatch); este é esencialmente o exemplo dado no artigo de Dan Abramov:
react-app/src/ErrorBoundary.js
import React, { Component } from 'react';
import * as Sentry from '@sentry/browser';
export default class ErrorBoundary extends Component {
constructor(props) {
super(props);
this.state = { hasError: false };
}
componentDidCatch(err, info) {
this.setState({ hasError: true });
Sentry.captureException(err);
}
render() {
if (this.state.hasError) {
return <h1>Something went wrong.</h1>;
}
return this.props.children;
}
}