рд╣рдо рд░рд┐рдПрдХреНрдЯ рдХреЗ рд╕рд╛рде рд╕реЗрдВрдЯреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЦреЛрдЬ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдпрд╣ рдЖрд▓реЗрдЦ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрдВрдЯреНрд░реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ:
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╕реЗрдВрдЯреНрд░реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛; рд╕рдВрддрд░реА рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ. рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо рд░рд┐рдПрдХреНрдЯ рдЪреБрдирддреЗ рд╣реИрдВред
рд╣рдо рд░рд┐рдПрдХреНрдЯ рд╡рд╛рд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЕрдкрдиреЗ рджреЛ рдмрдЯрди, рд╣реИрд▓реЛ рдФрд░ рдПрд░рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗред рд╣рдо рдЕрдкрдирд╛ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдХрд░ рд╢реБрд░реБрдЖрдд рдХрд░рддреЗ рд╣реИрдВ:
npx create-react-app react-app
рдлрд┐рд░ рд╣рдо рд╕реЗрдВрдЯреНрд░реА рдкреИрдХреЗрдЬ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ:
yarn add @sentry/browser
рдФрд░ рдЗрд╕реЗ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ:
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдРрдк/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,
});
}
...
рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ:
- рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдореБрджреНрджреЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд▓рд┐рдП рдХрдВрд╕реЛрд▓ рдЬреИрд╕реЗ рдЕрдиреНрдп рддрдВрддреНрд░ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреЗрд╡рд▓ рдЙрддреНрдкрд╛рджрди рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╕реЗрдВрдЯреНрд░реА рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВ
рдЗрд╕рдХреЗ рдмрд╛рдж рд╣рдо рдЕрдкрдиреЗ рд╣реИрд▓реЛ рдФрд░ рдПрд░рд░ рдмрдЯрди рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдРрдк/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);
}
}
}
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдРрдк/src/MyError.js
import React, { Component } from 'react';
export default class MyError extends Component {
render() {
return (
<div>
<button
onClick={this.handleClick}
>
Error
</button>
</div>
)
}
handleClick = () => {
throw new Error('Uncaught');
}
}
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдРрдк/src/App.js
...
import Hello from './Hello';
import MyError from './MyError';
class App extends Component {
render() {
return (
<div className="App">
...
<Hello />
<MyError />
</div>
);
}
}
export default App;
рд╕рдорд╕реНрдпрд╛ (рд╕реНрд░реЛрдд рдорд╛рдирдЪрд┐рддреНрд░)
рд╣рдо рдирд┐рдореНрди рджрд░реНрдЬ рдХрд░рдХреЗ рдкреНрд░реЛрдбрдХреНрд╢рди рдмрд┐рд▓реНрдб рдХреЗ рд╕рд╛рде рд╕реЗрдВрдЯреНрд░реА рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
yarn build
рдФрд░ рдмрд┐рд▓реНрдб рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рджрд░реНрдЬ рдХрд░реЗрдВ:
npx http-server -c-1
рдЬрд┐рд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╣рдореЗрдВ рддреБрд░рдВрдд рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рд╕реЗрдВрдЯреНрд░реА рдХреЗ рддреНрд░реБрдЯрд┐ рд░рд┐рдХреЙрд░реНрдб рдЫреЛрдЯреЗ рдмреИрдЪ рдореЗрдВ рд▓рд╛рдЗрди рдирдВрдмрд░реЛрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реИрдВ; рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ.
рд╕реЗрдВрдЯреНрд░реА рд╕реЗрд╡рд╛ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдХрдо рдХрд┐рдП рдЧрдП рдкреИрдХреЗрдЯ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдорд╛рдирдЪрд┐рддреНрд░ рдЦреАрдВрдЪрдХрд░ рдЗрд╕реЗ рд╕рдордЭрд╛рддреА рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рд╕реЗ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ (рд╕реЗрдВрдЯреНрд░реА рд╕реЗрд╡рд╛ рджреНрд╡рд╛рд░рд╛ рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рдирд╣реАрдВ)ред
рд╕рдорд╛рдзрд╛рди (рд╕реНрд░реЛрдд рдорд╛рдирдЪрд┐рддреНрд░)
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡реЗрдм рд╕рд░реНрд╡рд░ рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЪрд▓рд╛рдирд╛ рд╣реИред GitHub рдкреЗрдЬ рд╕реЗрд╡рд╛ (рдирд┐рдГрд╢реБрд▓реНрдХ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдЙрддреНрддрд░ рдмрдЯрдиред рдЙрдкрдпреЛрдЧ рдХреЗ рдЪрд░рдг рдЖрдорддреМрд░ рдкрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:
-
рдлрд╝реЛрд▓реНрдбрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЙрдкреА рдХрд░реЗрдВ рдирд┐рд░реНрдорд╛рдг рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдбреЙрдХреНрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рдореВрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВред
-
рдЪрд╛рд▓реВ рдХрд░реЗрдВ GitHub рдкреЗрдЬ рдбреЙрдХреНрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ (GitHub рд╕реЗ)ред рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛рдУрдВ
-
GitHub рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдкреБрд╢ рдХрд░реЗрдВ
рдиреЛрдЯ: рдЬрдм рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдореБрдЭреЗ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ рдХреНрд░рд┐рдПрдЯ-рдХреНрд░рд┐рдПрдЯ-рдРрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрдо рдкреЗрдЬ рдлрд╝рдВрдХреНрд╢рдиред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛ package.json рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЖрдпрд╛:
"homepage": "https://larkintuckerllc.github.io/hello-sentry/"
рдЪрд▓ рд░рд╣реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИ:
рдкрдХрдбрд╝реЗ рдЧрдП рдХреАрдбрд╝реЛрдВ рдХрд╛ рдЪрд┐рддреНрд░рдг
рдЪрд▓рд┐рдП рд╣реЗрд▓реЛ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдЪрд▓рддреЗ рд╣реИрдВред
рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдиреЗ рд╡рд╛рд▓реА рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде:
рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ:
- рдпрд╣ рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХреА, рдмреНрд░рд╛рд╡реЛ.
рдмреЗрд╣рд┐рд╕рд╛рдм рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдЪрд┐рддреНрд░рдг
рдЗрд╕реА рддрд░рд╣, рдЪрд▓рд┐рдП рдмрдЯрди рдХреНрд▓рд┐рдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВ рддреНрд░реБрдЯрд┐.
рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдиреЗ рд╡рд╛рд▓реА рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде:
рдмреЗрд╣рд┐рд╕рд╛рдм рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдмреЗрд╣рддрд░ рдкреНрд░рдмрдВрдзрди (рдкреНрд░рддрд┐рдкрд╛рджрди)
рддреНрд░реБрдЯрд┐ рд╕реАрдорд╛ рдХрд╛ рдкрд░рд┐рдЪрдп
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддреНрд░реБрдЯрд┐ рд╕реЗ рд╕рдВрдкреВрд░реНрдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрд╛рдзрд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд░рд┐рдПрдХреНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд░рд┐рдПрдХреНрдЯ 16 "рддреНрд░реБрдЯрд┐ рд╕реАрдорд╛" рдирд╛рдордХ рдПрдХ рдирдИ рдЕрд╡рдзрд╛рд░рдгрд╛ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИред
рддреНрд░реБрдЯрд┐ рд╕реАрдорд╛рдПрдБ рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХ рд╣реИрдВ рдЬреЛ рдЕрдкрдиреЗ рдЪрд╛рдЗрд▓реНрдб рдШрдЯрдХ рдЯреНрд░реА рдореЗрдВ рдХрд╣реАрдВ рднреА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкрдХрдбрд╝рддреЗ рд╣реИрдВ, рдЙрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд▓реЙрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рдШрдЯрдХ рдЯреНрд░реА рдХреЗ рдмрдЬрд╛рдп рдлрд╝реЙрд▓рдмреИрдХ рдпреВрдЖрдИ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВред рддреНрд░реБрдЯрд┐ рд╕реАрдорд╛рдПрдБ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди, рдЬреАрд╡рдирдЪрдХреНрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдФрд░ рдЙрдирдХреЗ рдиреАрдЪреЗ рдкреВрд░реЗ рдкреЗрдбрд╝ рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкрдХрдбрд╝рддреА рд╣реИрдВред
...
рдЕрдЬреНрдЮрд╛рдд рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдирдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░
рдпрд╣ рдмрджрд▓рд╛рд╡ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ. рд░рд┐рдПрдХреНрдЯ 16 рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЬреЛ рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рд╕реАрдорд╛ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рдкрдХрдбрд╝реА рдЧрдИрдВ, рдЙрдирдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕рдВрдкреВрд░реНрдг рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХ рдЯреНрд░реА рдЕрдирдорд╛рдЙрдВрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
- рдбреИрди рдЕрдмреНрд░рд╛рдореЛрд╡ -
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ 16 рдореЗрдВ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди
рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рд╕рдордп рд▓рдЧрд╛ рд╡рд╣ рдпрд╣ рд╣реИ рдЙрдкрд░реЛрдХреНрдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗрд╡рд▓ рд░реЗрдВрдбрд░ рд╡рд┐рдзрд┐ рдореЗрдВ рдЙрддреНрдкрдиреНрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдпрд╛ рдХрд┐рд╕реА рднреА рдЬреАрд╡рдирдЪрдХреНрд░ рд╡рд┐рдзрд┐ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ). рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддреНрд░реБрдЯрд┐ рд╕реАрдорд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╣рдорд╛рд░реЗ рдмрдЯрди рдХрд╛ рдХреЛрдИ рднрд▓рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рддреНрд░реБрдЯрд┐; рдпрд╣ рддреНрд░реБрдЯрд┐ рдХреНрд▓рд┐рдХ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдереА.
рдЖрдЗрдП рд░реЗрдВрдбрд░ рдПрд░рд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдВ рдФрд░ рдлрд┐рд░ рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрдзрд┐рдХ рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд░рд░ рдмрд╛рдЙрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдРрдк/src/MyRenderError
import React, { Component } from 'react';
export default class MyRenderError extends Component {
state = {
flag: false,
};
render() {
const { flag } = this.state;
return (
<div>
<button
onClick={this.handleClick}
>
Render Error
</button>
{ flag && <div>{flag.busted.bogus}</div> }
</div>
)
}
handleClick = () => {
this.setState({
flag: true,
});
}
}
рдирд┐рд░реАрдХреНрд╖рдг:
-
рдЬрдм рдЖрдк рдмрдЯрди рджрдмрд╛рддреЗ рд╣реИрдВ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЭрдВрдбрд╛.рдкрд░реНрджрд╛рдлрд╛рд╢.рдлрд░реНрдЬреА, рдЬреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ
-
рддреНрд░реБрдЯрд┐ рд╕реАрдорд╛ рдХреЗ рдмрд┐рдирд╛, рд╕рдВрдкреВрд░реНрдг рдШрдЯрдХ рд╡реГрдХреНрд╖ рдЕрдирдорд╛рдЙрдВрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
рдлрд┐рд░ рд╣рдо рдЕрдкрдирд╛ рддреНрд░реБрдЯрд┐ рд╕реАрдорд╛ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ (рдирдИ рдЬреАрд╡рдирдЪрдХреНрд░ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдХрдВрдкреЛрдиреЗрдВрдЯрдбрд┐рдбрдХреИрдЪ); рдпрд╣ рдореВрд▓рддрдГ рдбреИрди рдЕрдмреНрд░рд╛рдореЛрд╡ рдХреЗ рд▓реЗрдЦ рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдРрдк/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;
}
}
рдЕрдВрдд рдореЗрдВ рд╣рдо рдЗрд╕ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдРрдк/src/App.js
...
import MyRenderError from './MyRenderError';
class App extends Component {
render() {
return (
<ErrorBoundary>
<div className="App">
...
</div>
</ErrorBoundary>
);
}
}
...
рд╣рд╛рд▓рд╛рдБрдХрд┐, рд░реЗрдВрдбрд░ рдПрд░рд░ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рд╕реЗ рдлрд╝реЙрд▓рдмреИрдХ рдпреВрдЖрдИ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╕реЗрдВрдЯреНрд░реА рдХреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рд░рд┐рдкреЛрд░реНрдЯ рд╣реЛрддреА рд╣реИред
рд╕рдорд╛рдкрди
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд▓рдЧрд╛ рд╣реЛрдЧрд╛ред
рдкреБрдирд╢реНрдЪ
рд╕реЗрдВрдЯреНрд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреАрдПрд╕ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдЪреИрдЯ
рд╕реНрд░реЛрдд: www.habr.com