āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻ¤āĻŋāĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ¸āĻš Sentry āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻ āĻ¨ā§āĻŦā§āĻˇāĻŖ āĻāĻ°āĻāĻŋāĨ¤
āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻ¸ā§āĻ¨ā§āĻā§āĻ°āĻŋ āĻ¤ā§āĻ°ā§āĻāĻŋāĻā§āĻ˛āĻŋ āĻ°āĻŋāĻĒā§āĻ°ā§āĻ āĻāĻ°āĻžāĻ° āĻ¸āĻžāĻĨā§ āĻļā§āĻ°ā§ āĻšāĻāĻ¯āĻŧāĻž āĻāĻāĻāĻŋ āĻ¸āĻŋāĻ°āĻŋāĻā§āĻ° āĻ
āĻāĻļ:
āĻĒā§āĻ°āĻ¤āĻŋāĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ° āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨
āĻĒā§āĻ°āĻĨāĻŽā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻāĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ¸ā§āĻ¨ā§āĻā§āĻ°āĻŋ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ āĻ¯ā§āĻā§āĻ¤ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§; āĻ¸ā§āĻ¨ā§āĻā§āĻ°āĻŋ āĻāĻ¯āĻŧā§āĻŦāĻ¸āĻžāĻāĻ āĻĨā§āĻā§āĨ¤ āĻāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻ¤āĻŋāĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°āĻŋāĨ¤
āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻ¤āĻŋāĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ¸āĻš āĻāĻāĻāĻŋ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻĻā§āĻāĻŋ āĻŦā§āĻ¤āĻžāĻŽ, āĻšā§āĻ¯āĻžāĻ˛ā§ āĻāĻŦāĻ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°āĻŦāĨ¤ āĻāĻŽāĻ°āĻž āĻāĻŽāĻžāĻĻā§āĻ° āĻ¸ā§āĻāĻžāĻ°ā§āĻāĻžāĻ° āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§ āĻļā§āĻ°ā§ āĻāĻ°āĻŋ:
npx create-react-app react-app
āĻ¤āĻžāĻ°āĻĒāĻ°ā§ āĻāĻŽāĻ°āĻž āĻ¸ā§āĻ¨ā§āĻā§āĻ°āĻŋ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻāĻŽāĻĻāĻžāĻ¨āĻŋ āĻāĻ°āĻŋ:
yarn add @sentry/browser
āĻāĻŦāĻ āĻāĻāĻŋ āĻļā§āĻ°ā§ āĻāĻ°ā§āĻ¨:
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,
});
}
...
āĻĒāĻ°ā§āĻ¯āĻŦā§āĻā§āĻˇāĻŖ:
- āĻŦāĻŋāĻāĻžāĻļā§āĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻžāĻā§ āĻāĻ¨āĻ¸ā§āĻ˛ā§āĻ° āĻŽāĻ¤ā§ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻā§āĻ˛āĻŋ āĻĒāĻ°ā§āĻ¯āĻŦā§āĻā§āĻˇāĻŖā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ°āĻ¯āĻŧā§āĻā§, āĻ¤āĻžāĻ āĻāĻŽāĻ°āĻž āĻā§āĻŦāĻ˛āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ¤ā§āĻĒāĻžāĻĻāĻ¨ āĻŦāĻŋāĻ˛ā§āĻĄā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¸ā§āĻ¨ā§āĻā§āĻ°āĻŋ āĻ¸āĻā§āĻˇāĻŽ āĻāĻ°āĻŋ
āĻāĻ°āĻĒāĻ°ā§ āĻāĻŽāĻ°āĻž āĻāĻŽāĻžāĻĻā§āĻ° āĻšā§āĻ¯āĻžāĻ˛ā§ āĻāĻŦāĻ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻŦā§āĻ¤āĻžāĻŽāĻā§āĻ˛āĻŋ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻāĻ°āĻŋ āĻāĻŦāĻ āĻ¸ā§āĻā§āĻ˛āĻŋāĻā§ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ā§ āĻ¯ā§āĻā§āĻ¤ āĻāĻ°āĻŋ:
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);
}
}
}
react-app/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');
}
}
react-app/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 āĻ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻā§āĻ˛āĻŋ āĻĒā§āĻļ āĻāĻ°ā§āĻ¨
āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯: āĻāĻŽāĻŋ āĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻ¤āĻž āĻŦā§āĻ° āĻāĻ°āĻžāĻ° āĻĒāĻ°ā§ āĻ¤ā§āĻ°āĻŋ-āĻ¤ā§āĻ°āĻŋ-āĻ ā§āĻ¯āĻžāĻĒ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻāĻžāĻ˛ā§ āĻāĻ°āĻ¤ā§ āĻšā§āĻŽ āĻĒā§āĻ āĻĢāĻžāĻāĻļāĻ¨āĨ¤ package.json-āĻ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻ¯ā§āĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ¨ā§āĻŽā§ āĻāĻ¸ā§āĻāĻŋ:
"homepage": "https://larkintuckerllc.github.io/hello-sentry/"
āĻāĻ˛āĻŽāĻžāĻ¨ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ā§āĻ° āĻā§āĻĄāĻŧāĻžāĻ¨ā§āĻ¤ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ āĻāĻāĻžāĻ¨ā§ āĻāĻĒāĻ˛āĻŦā§āĻ§:
āĻ§āĻ°āĻž āĻĒāĻĄāĻŧāĻž āĻŦāĻžāĻāĻā§āĻ˛āĻŋāĻ° āĻĻā§āĻˇā§āĻāĻžāĻ¨ā§āĻ¤
āĻšā§āĻ¯āĻžāĻ˛ā§ āĻŦā§āĻ¤āĻžāĻŽā§ āĻā§āĻ˛āĻŋāĻ āĻāĻ°ā§ āĻāĻ˛ā§āĻ¨āĨ¤
āĻāĻ āĻŽāĻ¤ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻŋāĻ¤ āĻāĻāĻāĻŋ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻ¸āĻā§āĻā§:
āĻĒāĻ°ā§āĻ¯āĻŦā§āĻā§āĻˇāĻŖ:
- āĻāĻ āĻŦāĻžāĻ āĻ°āĻŋāĻĒā§āĻ°ā§āĻ āĻĒāĻ°āĻŋāĻˇā§āĻāĻžāĻ° āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻ¨āĻž, āĻŦāĻ˛āĻŋāĻšāĻžāĻ°āĻŋ.
āĻ¤ā§āĻ°ā§āĻāĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻšāĻŋāĻ¸āĻžāĻŦāĻšā§āĻ¨ā§āĻ° āĻāĻŋāĻ¤ā§āĻ°
āĻ āĻ¨ā§āĻ°ā§āĻĒāĻāĻžāĻŦā§, āĻāĻ° āĻŦāĻžāĻāĻ¨ āĻā§āĻ˛āĻŋāĻ āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻ¯āĻžāĻ¨ āĻā§āĻ˛.
āĻāĻ āĻŽāĻ¤ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻŋāĻ¤ āĻāĻāĻāĻŋ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻ¸āĻā§āĻā§:
āĻšāĻŋāĻ¸āĻžāĻŦāĻŦāĻŋāĻšā§āĻ¨ āĻ¤ā§āĻ°ā§āĻāĻŋāĻā§āĻ˛āĻŋāĻ° āĻāĻ°āĻ āĻāĻžāĻ˛ āĻĒāĻ°āĻŋāĻāĻžāĻ˛āĻ¨āĻž (āĻ°ā§āĻ¨ā§āĻĄāĻžāĻ°āĻŋāĻ)
āĻ¤ā§āĻ°ā§āĻāĻŋ āĻ¸ā§āĻŽāĻž āĻĒāĻ°āĻŋāĻāĻŋāĻ¤āĻŋ
āĻāĻāĻāĻžāĻ° āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ā§āĻ° āĻāĻāĻāĻŋ āĻ āĻāĻļā§ āĻāĻāĻāĻŋ āĻāĻžāĻāĻžāĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻ¸āĻŽāĻā§āĻ° āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻāĻŋ āĻāĻžāĻā§āĻāĻž āĻāĻāĻŋāĻ¤ āĻ¨āĻ¯āĻŧāĨ¤ āĻĒā§āĻ°āĻ¤āĻŋāĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻāĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻĒā§āĻ°āĻ¤āĻŋāĻā§āĻ°āĻŋāĻ¯āĻŧāĻž 16 "āĻāĻ°āĻ° āĻŦāĻžāĻāĻ¨ā§āĻĄ" āĻ¨āĻžāĻŽā§ āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ§āĻžāĻ°āĻŖāĻž āĻāĻžāĻ˛ā§ āĻāĻ°ā§āĻā§āĨ¤
āĻ¤ā§āĻ°ā§āĻāĻŋ āĻ¸ā§āĻŽāĻžāĻ¨āĻžāĻā§āĻ˛āĻŋ āĻšāĻ˛ āĻĒā§āĻ°āĻ¤āĻŋāĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻāĻĒāĻžāĻĻāĻžāĻ¨ āĻ¯āĻž āĻ¤āĻžāĻĻā§āĻ° āĻāĻžāĻāĻ˛ā§āĻĄ āĻāĻŽā§āĻĒā§āĻ¨ā§āĻ¨ā§āĻ āĻā§āĻ°āĻŋāĻ¤ā§ āĻ¯ā§āĻā§āĻ¨ āĻāĻžāĻ¯āĻŧāĻāĻžāĻ¯āĻŧ āĻāĻžāĻāĻžāĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻ¤ā§āĻ°ā§āĻāĻŋāĻā§āĻ˛āĻŋ āĻ§āĻ°ā§, āĻ¸ā§āĻ āĻ¤ā§āĻ°ā§āĻāĻŋāĻā§āĻ˛āĻŋ āĻ˛āĻ āĻāĻ°ā§ āĻāĻŦāĻ āĻā§āĻ°ā§āĻ¯āĻžāĻļ āĻšāĻāĻ¯āĻŧāĻž āĻāĻŽā§āĻĒā§āĻ¨ā§āĻ¨ā§āĻ āĻā§āĻ°āĻŋāĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§ āĻāĻāĻāĻŋ āĻĢāĻ˛āĻŦā§āĻ¯āĻžāĻ UI āĻ°ā§āĻ¨ā§āĻĄāĻžāĻ° āĻāĻ°ā§ā§ˇ āĻ¤ā§āĻ°ā§āĻāĻŋāĻ° āĻ¸ā§āĻŽāĻžāĻ¨āĻž āĻ°ā§āĻ¨ā§āĻĄāĻžāĻ°āĻŋāĻāĻ¯āĻŧā§āĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻā§āĻŦāĻ¨āĻāĻā§āĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ¤ā§ āĻāĻŦāĻ āĻ¤āĻžāĻĻā§āĻ° āĻ¨ā§āĻā§āĻ° āĻĒā§āĻ°ā§ āĻāĻžāĻā§āĻ° āĻāĻ¨ā§āĻ¸āĻā§āĻ°āĻžāĻā§āĻāĻ°āĻā§āĻ˛āĻŋāĻ¤ā§ āĻ¤ā§āĻ°ā§āĻāĻŋāĻā§āĻ˛āĻŋ āĻ§āĻ°ā§āĨ¤
...
āĻ āĻ¨āĻžāĻŦāĻŋāĻˇā§āĻā§āĻ¤ āĻ¤ā§āĻ°ā§āĻāĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻ¨āĻ¤ā§āĻ¨ āĻāĻāĻ°āĻŖ
āĻāĻ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ¤āĻžā§āĻĒāĻ°ā§āĻ¯āĻĒā§āĻ°ā§āĻŖāĨ¤ āĻ°āĻŋāĻ ā§āĻ¯āĻžāĻā§āĻ 16 āĻ āĻ¨ā§āĻ¯āĻžāĻ¯āĻŧā§, āĻā§āĻ¨ āĻ¤ā§āĻ°ā§āĻāĻŋāĻ° āĻ¸ā§āĻŽāĻžāĻ¨āĻž āĻĻā§āĻŦāĻžāĻ°āĻž āĻ§āĻ°āĻž āĻĒāĻĄāĻŧā§āĻ¨āĻŋ āĻāĻŽāĻ¨ āĻ¤ā§āĻ°ā§āĻāĻŋāĻ° āĻĢāĻ˛ā§ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻĒā§āĻ°āĻ¤āĻŋāĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻāĻĒāĻžāĻĻāĻžāĻ¨ āĻā§āĻ°āĻŋ āĻāĻ¨āĻŽāĻžāĻāĻ¨ā§āĻ āĻāĻ°āĻž āĻšāĻŦā§āĨ¤
- āĻĄā§āĻ¯āĻžāĻ¨ āĻāĻŦā§āĻ°āĻžāĻŽāĻ -
āĻĒā§āĻ°āĻ¤āĻŋāĻā§āĻ°āĻŋāĻ¯āĻŧāĻž 16-āĻ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻšā§āĻ¯āĻžāĻ¨ā§āĻĄāĻ˛āĻŋāĻ
āĻāĻāĻāĻŋ āĻā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§āĻ°ā§āĻŖ āĻ¸ā§āĻĒāĻˇā§āĻā§āĻāĻ°āĻŖ āĻ¯āĻž āĻāĻŽāĻŋ āĻāĻāĻŋ āĻāĻĒāĻ˛āĻŦā§āĻ§āĻŋ āĻāĻ°āĻžāĻ° āĻāĻā§ āĻāĻŽāĻžāĻā§ āĻāĻāĻā§ āĻ¸āĻŽāĻ¯āĻŧ āĻ¨āĻŋāĻ¯āĻŧā§āĻāĻŋāĻ˛ āĻ¤āĻž āĻšāĻ˛ āĻāĻĒāĻ°ā§āĻ° āĻāĻāĻ°āĻŖāĻāĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ°ā§āĻ¨ā§āĻĄāĻžāĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ¤ā§ āĻ¨āĻŋāĻā§āĻˇāĻŋāĻĒā§āĻ¤ āĻ¤ā§āĻ°ā§āĻāĻŋāĻā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°ā§ (āĻ āĻĨāĻŦāĻž āĻā§āĻŦāĻ¨āĻāĻā§āĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻ¯ā§ āĻā§āĻ¨āĻ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ¤ā§ āĻ¸āĻŽā§āĻāĻŦāĻ¤). āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻ¤ā§āĻ°ā§āĻāĻŋāĻ° āĻ¸ā§āĻŽāĻžāĻ¨āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻāĻŽāĻžāĻĻā§āĻ° āĻŦā§āĻ¤āĻžāĻŽā§āĻ° āĻ¸āĻžāĻĨā§ āĻā§āĻ¨ āĻāĻžāĻ˛ āĻāĻžāĻ āĻāĻ°āĻŦā§ āĻ¨āĻž āĻā§āĻ˛; āĻāĻ āĻ¤ā§āĻ°ā§āĻāĻŋāĻāĻŋ āĻā§āĻ˛āĻŋāĻ āĻšā§āĻ¯āĻžāĻ¨ā§āĻĄāĻ˛āĻžāĻ°ā§ āĻāĻŋāĻ˛āĨ¤
āĻāĻ¸ā§āĻ¨ āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻ°ā§āĻ¨ā§āĻĄāĻžāĻ°āĻŋāĻ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŋ āĻāĻŦāĻ āĻ¤āĻžāĻ°āĻĒāĻ°ā§ āĻ¤ā§āĻ°ā§āĻāĻŋāĻāĻŋ āĻāĻ°āĻ āĻ¸ā§āĻ¨ā§āĻĻāĻ°āĻāĻžāĻŦā§ āĻĒāĻ°āĻŋāĻāĻžāĻ˛āĻ¨āĻž āĻāĻ°āĻ¤ā§ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻ¸ā§āĻŽāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŋāĨ¤
react-app/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,
});
}
}
āĻĒāĻ°ā§āĻ¯āĻŦā§āĻā§āĻˇāĻŖ:
-
āĻ¯āĻāĻ¨ āĻāĻĒāĻ¨āĻŋ āĻŦā§āĻ¤āĻžāĻŽ āĻāĻŋāĻĒā§āĻ¨, āĻĒā§āĻ°āĻ¤āĻŋāĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻ¨ āĻāĻ°āĻž āĻšāĻŦā§ flag.busted.bogus, āĻ¯āĻž āĻāĻāĻāĻŋ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§
-
āĻāĻāĻāĻŋ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻ¸ā§āĻŽāĻžāĻ¨āĻž āĻāĻžāĻĄāĻŧāĻž, āĻ¸āĻŽāĻā§āĻ° āĻāĻĒāĻžāĻĻāĻžāĻ¨ āĻāĻžāĻ āĻāĻ¨āĻŽāĻžāĻāĻ¨ā§āĻ āĻāĻ°āĻž āĻšāĻŦā§
āĻ¤āĻžāĻ°āĻĒāĻ°ā§ āĻāĻŽāĻ°āĻž āĻāĻŽāĻžāĻĻā§āĻ° āĻ¤ā§āĻ°ā§āĻāĻŋ āĻ¸ā§āĻŽāĻžāĻ¨āĻž āĻā§āĻĄ āĻ˛āĻŋāĻāĻŋ (āĻ¨āĻ¤ā§āĻ¨ āĻā§āĻŦāĻ¨āĻāĻā§āĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ componentDidCatch); āĻāĻāĻŋ āĻŽā§āĻ˛āĻ¤ āĻĄā§āĻ¯āĻžāĻ¨ āĻāĻŦā§āĻ°āĻžāĻŽāĻā§āĻ° āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§ āĻĻā§āĻāĻ¯āĻŧāĻž āĻāĻĻāĻžāĻšāĻ°āĻŖ:
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;
}
}
āĻ āĻŦāĻļā§āĻˇā§ āĻāĻŽāĻ°āĻž āĻāĻ āĻāĻĒāĻžāĻĻāĻžāĻ¨āĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŋ:
react-app/src/App.js
...
import MyRenderError from './MyRenderError';
class App extends Component {
render() {
return (
<ErrorBoundary>
<div className="App">
...
</div>
</ErrorBoundary>
);
}
}
...
āĻ¯āĻžāĻāĻšā§āĻ, āĻ°ā§āĻ¨ā§āĻĄāĻžāĻ° āĻ¤ā§āĻ°ā§āĻāĻŋ āĻŦā§āĻ¤āĻžāĻŽā§ āĻā§āĻ˛āĻŋāĻ āĻāĻ°āĻ˛ā§ āĻĢāĻ˛āĻŦā§āĻ¯āĻžāĻ UI āĻĻā§āĻāĻžāĻ¯āĻŧ āĻāĻŦāĻ āĻ¸ā§āĻ¨ā§āĻā§āĻ°āĻŋāĻā§ āĻāĻāĻāĻŋ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻ°āĻŋāĻĒā§āĻ°ā§āĻ āĻāĻ°ā§āĨ¤
āĻĒāĻ°āĻŋāĻĒā§āĻ°āĻŖ
āĻāĻŽāĻŋ āĻāĻļāĻž āĻāĻ°āĻŋ āĻāĻĒāĻ¨āĻŋ āĻāĻ āĻ¸āĻšāĻžāĻ¯āĻŧāĻ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻā§āĻā§.
āĻĻā§āĻ°āĻˇā§āĻāĻŦā§āĻ¯
āĻ¸ā§āĻ¨ā§āĻā§āĻ°āĻŋāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻĒāĻŋāĻāĻ¸ āĻā§āĻ˛āĻŋāĻā§āĻ°āĻžāĻŽ āĻā§āĻ¯āĻžāĻ
āĻāĻ¤ā§āĻ¸: www.habr.com