เดฑเดฟเดฏเดพเด•เตเดฑเตเดฑเต เดซเตเดฐเดฃเตเดŸเตโ€ŒเดŽเตปเดกเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เดณเดฟเดฒเต† เดฌเด—เตเด•เดณเตเดŸเต† เดธเต†เตปเดŸเตเดฐเดฟ เดฑเดฟเดฎเต‹เดŸเตเดŸเต เดฎเต‹เดฃเดฟเดฑเตเดฑเดฑเดฟเด‚เด—เต

เดธเต†เตปเดŸเตเดฐเดฟ เดตเดฟเดคเตเดคเต เดฑเดฟเดฏเดพเด•เตเดŸเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดžเด™เตเด™เตพ เดชเดฐเตเดฏเดตเต‡เด•เตเดทเดฃเด‚ เดšเต†เดฏเตเดฏเตเด•เดฏเดพเดฃเต.

เดฑเดฟเดฏเดพเด•เตเดฑเตเดฑเต เดซเตเดฐเดฃเตเดŸเตโ€ŒเดŽเตปเดกเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เดณเดฟเดฒเต† เดฌเด—เตเด•เดณเตเดŸเต† เดธเต†เตปเดŸเตเดฐเดฟ เดฑเดฟเดฎเต‹เดŸเตเดŸเต เดฎเต‹เดฃเดฟเดฑเตเดฑเดฑเดฟเด‚เด—เต

เดˆ เดฒเต‡เด–เดจเด‚ เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดธเต†เตปเดŸเตเดฐเดฟ เดชเดฟเดถเด•เตเด•เตพ เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดฒเต‚เดŸเต† เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดชเดฐเดฎเตเดชเดฐเดฏเตเดŸเต† เดญเดพเด—เดฎเดพเดฃเต: เดญเดพเด—เด‚ 1.

เดชเตเดฐเดคเดฟเดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตฝ

เด†เดฆเตเดฏเด‚ เดจเดฎเตเดฎเตพ เดˆ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเดพเดฏเดฟ เด’เดฐเต เดชเตเดคเดฟเดฏ เดธเต†เตปเดŸเตเดฐเดฟ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดšเต‡เตผเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต; เดธเต†เตปเดŸเตเดฐเดฟ เดตเต†เดฌเตเดธเตˆเดฑเตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต. เดˆ เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเตฝ เดžเด™เตเด™เตพ React เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเดจเตเดจเต.

เดฑเดฟเดฏเดพเด•เตเดฑเตเดฑเต เด‰เดณเตเดณ เด’เดฐเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเดฟเตฝ เดžเด™เตเด™เดณเตเดŸเต† เดฐเดฃเตเดŸเต เดฌเดŸเตเดŸเดฃเตเด•เตพ, เดนเดฒเต‹, เดŽเดฑเตผ เดŽเดจเตเดจเดฟเดต เดžเด™เตเด™เตพ เดตเต€เดฃเตเดŸเตเด‚ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเด‚. เดžเด™เตเด™เดณเตเดŸเต† เดธเตเดฑเตเดฑเดพเตผเดŸเตเดŸเตผ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดธเตƒเดทเตเดŸเดฟเดšเตเดšเตเด•เตŠเดฃเตเดŸเต เดžเด™เตเด™เตพ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเต:

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 เดชเต‡เดœเต เดธเต‡เดตเดจเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดฎเดฑเตเดชเดŸเดฟ เดฌเดŸเตเดŸเตบ (เดธเตŒเดœเดจเตเดฏเดฎเดพเดฃเต). เดธเดพเดงเดพเดฐเดฃเดฏเดพเดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เต‡เดฃเตเดŸ เด˜เดŸเตเดŸเด™เตเด™เตพ เด‡เดชเตเดฐเด•เดพเดฐเดฎเดพเดฃเต:

  1. เดซเต‹เตพเดกเดฑเดฟเดฒเต† เด‰เดณเตเดณเดŸเด•เตเด•เด™เตเด™เตพ เดชเด•เตผเดคเตเดคเตเด• เดชเดฃเดฟเดฏเตเด• เดซเต‹เตพเดกเดฑเดฟเดฒเต‡เด•เตเด•เต เดกเต‡เดพเด•เตเดธเต เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟเดฏเตเดŸเต† เดฑเต‚เดŸเตเดŸเต เดกเดฏเดฑเด•เตเดŸเดฑเดฟเดฏเดฟเตฝ.

  2. เด“เตบ เดšเต†เดฏเตเดฏเตเด• GitHub เดชเต‡เดœเตเด•เตพ เดกเต‹เด•เตโ€Œเดธเต เดซเต‹เตพเดกเตผ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟเดฏเดฟเตฝ (GitHub-เตฝ เดจเดฟเดจเตเดจเต). เดฏเดœเดฎเดพเดจเดจเต เดถเดพเด–เด•เตพ

  3. GitHub-เดฒเต‡เด•เตเด•เต เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เดชเตเดทเต เดšเต†เดฏเตเดฏเตเด•

เด…เดญเดฟเดชเดพเดฏเดชเตเดชเต†เดŸเตเด•: เดžเดพเตป เดŽเดจเตเดคเดพเดฃเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เต‡เดฃเตเดŸเดคเต†เดจเตเดจเต เดฎเดจเดธเดฟเดฒเดพเด•เตเด•เดฟเดฏ เดถเต‡เดทเด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด•-เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด•-เด†เดชเตเดชเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดนเต‹เด‚ เดชเต‡เดœเต เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚. เดชเดพเด•เตเด•เต‡เดœเต.json-เดฒเต‡เด•เตเด•เต เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจเดต เดšเต‡เตผเด•เตเด•เดพเตป เด‡เดฑเด™เตเด™เดฟ:

"homepage": "https://larkintuckerllc.github.io/hello-sentry/"

เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเดฑเต† เด…เดตเดธเดพเดจ เดชเดคเดฟเดชเตเดชเต เด‡เดตเดฟเดŸเต† เดฒเดญเตเดฏเดฎเดพเดฃเต:

https://larkintuckerllc.github.io/hello-sentry/

เดชเดฟเดŸเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดŸ เดฌเด—เตเด•เดณเตเดŸเต† เดšเดฟเดคเตเดฐเต€เด•เดฐเดฃเด‚

เดนเดฒเต‹ เดฌเดŸเตเดŸเดฃเดฟเตฝ เด•เตเดฒเดฟเด•เตเด•เต เดšเต†เดฏเตเดคเต เดจเดฎเตเด•เตเด•เต เดจเดŸเด•เตเด•เดพเด‚.

เดฑเดฟเดฏเดพเด•เตเดฑเตเดฑเต เดซเตเดฐเดฃเตเดŸเตโ€ŒเดŽเตปเดกเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เดณเดฟเดฒเต† เดฌเด—เตเด•เดณเตเดŸเต† เดธเต†เตปเดŸเตเดฐเดฟ เดฑเดฟเดฎเต‹เดŸเตเดŸเต เดฎเต‹เดฃเดฟเดฑเตเดฑเดฑเดฟเด‚เด—เต

เด‡เดคเตเดชเต‹เดฒเต† เด’เดฐเต เดชเดฟเดถเด•เต เดฆเตƒเดถเตเดฏเดฎเดพเด•เตเดฎเตเดชเต‹เตพ:

เดฑเดฟเดฏเดพเด•เตเดฑเตเดฑเต เดซเตเดฐเดฃเตเดŸเตโ€ŒเดŽเตปเดกเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เดณเดฟเดฒเต† เดฌเด—เตเด•เดณเตเดŸเต† เดธเต†เตปเดŸเตเดฐเดฟ เดฑเดฟเดฎเต‹เดŸเตเดŸเต เดฎเต‹เดฃเดฟเดฑเตเดฑเดฑเดฟเด‚เด—เต

เดจเดฟเดฐเต€เด•เตเดทเดฃเด™เตเด™เตพ:

  • เดˆ เดฌเด—เต เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเต เด•เต‚เดŸเตเดคเตฝ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดพเตป เด•เดดเดฟเดžเตเดžเดฟเดฒเตเดฒ, เดฌเตเดฐเดพเดตเต‹.

เด•เดฃเด•เตเด•เดฟเตฝเดชเตเดชเต†เดŸเดพเดคเตเดค เดชเดฟเดถเด•เตเด•เดณเตเดŸเต† เดšเดฟเดคเตเดฐเต€เด•เดฐเดฃเด‚

เด…เดคเตเดชเต‹เดฒเต†, เดจเดฎเตเด•เตเด•เต เดฌเดŸเตเดŸเตบ เด•เตเดฒเดฟเด•เตเด•เดฟเดฒเต‚เดŸเต† เดชเต‹เด•เดพเด‚ เดชเดฟเดถเด•เต.

เดฑเดฟเดฏเดพเด•เตเดฑเตเดฑเต เดซเตเดฐเดฃเตเดŸเตโ€ŒเดŽเตปเดกเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เดณเดฟเดฒเต† เดฌเด—เตเด•เดณเตเดŸเต† เดธเต†เตปเดŸเตเดฐเดฟ เดฑเดฟเดฎเต‹เดŸเตเดŸเต เดฎเต‹เดฃเดฟเดฑเตเดฑเดฑเดฟเด‚เด—เต

เด‡เดคเตเดชเต‹เดฒเต† เด’เดฐเต เดชเดฟเดถเด•เต เดฆเตƒเดถเตเดฏเดฎเดพเด•เตเดฎเตเดชเต‹เตพ:

เดฑเดฟเดฏเดพเด•เตเดฑเตเดฑเต เดซเตเดฐเดฃเตเดŸเตโ€ŒเดŽเตปเดกเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เดณเดฟเดฒเต† เดฌเด—เตเด•เดณเตเดŸเต† เดธเต†เตปเดŸเตเดฐเดฟ เดฑเดฟเดฎเต‹เดŸเตเดŸเต เดฎเต‹เดฃเดฟเดฑเตเดฑเดฑเดฟเด‚เด—เต

เด•เดฃเด•เตเด•เดฟเตฝเดชเตเดชเต†เดŸเดพเดคเตเดค เดชเดฟเดถเด•เตเด•เตพ เดฎเดฟเด•เดšเตเดš เดฐเต€เดคเดฟเดฏเดฟเตฝ เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเตฝ (เดฑเต†เตปเดกเดฑเดฟเด‚เด—เต)

เดชเดฟเดถเด•เต เดชเดฐเดฟเดงเดฟเด•เดณเตเดŸเต† เด†เดฎเตเด–เด‚

เด‰เดชเดฏเต‹เด•เตเดคเตƒ เด‡เดจเตเดฑเตผเดซเต‡เดธเดฟเดจเตเดฑเต† เดญเดพเด—เดคเตเดคเตเดณเตเดณ เด’เดฐเต JavaScript เดชเดฟเดถเด•เต เดฎเตเดดเตเดตเตป เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเต†เดฏเตเด‚ เดคเด•เตผเด•เตเด•เดพเตป เดชเดพเดŸเดฟเดฒเตเดฒ. เดฑเดฟเดฏเดพเด•เตเดฑเตเดฑเต เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เตพเด•เตเด•เตเดณเตเดณ เดˆ เดชเตเดฐเดถเตเดจเด‚ เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดฑเดฟเดฏเดพเด•เตเดฑเตเดฑเต 16 "เดชเดฟเดถเด•เต เดชเดฐเดฟเดงเดฟเด•เตพ" เดŽเดจเตเดจ เดชเตเดคเดฟเดฏ เด†เดถเดฏเด‚ เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต.

เดšเตˆเตฝเดกเต เด•เต‹เด‚เดชเต‹เดฃเดจเตเดฑเต เดŸเตเดฐเต€เดฏเดฟเตฝ เดŽเดตเดฟเดŸเต†เดฏเตเด‚ เดœเดพเดตเดพเดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดชเดฟเดถเด•เตเด•เตพ เด•เดฃเตเดŸเต†เดคเตเดคเตเด•เดฏเตเด‚ เด† เดชเดฟเดถเด•เตเด•เตพ เดฒเต‹เด—เต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เด•เตเดฐเดพเดทเดพเดฏ เด˜เดŸเด• เดŸเตเดฐเต€เด•เตเด•เต เดชเด•เดฐเด‚ เด’เดฐเต เดซเดพเตพเดฌเดพเด•เตเด•เต เดฏเตเด เดฑเต†เตปเดกเตผ เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจ เดชเตเดฐเดคเดฟเด•เดฐเดฃ เด˜เดŸเด•เด™เตเด™เดณเดพเดฃเต เดชเดฟเดถเด•เต เด…เดคเดฟเดฐเตเด•เตพ. เดฑเต†เตปเดกเดฑเดฟเด‚เด—เต เดธเดฎเดฏเดคเตเดคเตเด‚ เดฒเตˆเดซเต เดธเตˆเด•เตเด•เดฟเตพ เดฐเต€เดคเดฟเด•เดณเดฟเดฒเตเด‚ เด…เดตเดฏเตเด•เตเด•เต เดคเดพเดดเต†เดฏเตเดณเตเดณ เดฎเตเดดเตเดตเตป เดŸเตเดฐเต€เดฏเตเดŸเต†เดฏเตเด‚ เด•เตบเดธเตเดŸเตเดฐเด•เตเดฑเตเดฑเดฑเตเด•เดณเดฟเดฒเตเด‚ เดชเดฟเดถเด•เต เด…เดคเดฟเดฐเตเด•เตพ เดชเดฟเดถเด•เตเด•เตพ เดชเดฟเดŸเดฟเด•เตเด•เตเดจเตเดจเต.

เดชเด™เตเด•เต โ‚ฌ |

เด•เดฃเตเดŸเต†เดคเตเดคเดพเดคเตเดค เดชเดฟเดถเด•เตเด•เตพเด•เตเด•เตเดณเตเดณ เดชเตเดคเดฟเดฏ เดชเต†เดฐเตเดฎเดพเดฑเตเดฑเด‚

เดˆ เดฎเดพเดฑเตเดฑเด‚ เดถเตเดฐเดฆเตเดงเต‡เดฏเดฎเดพเดฃเต. เดฑเดฟเดฏเดพเด•เตเดฑเตเดฑเต 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,
    });
  }
}

เดจเดฟเดฐเต€เด•เตเดทเดฃเด‚:

  • เดฌเดŸเตเดŸเตบ เด…เดฎเตผเดคเตเดคเตเดฎเตเดชเต‹เตพ, เดคเดฟเดฐเดฟเดšเตเดšเดŸเดฟ เดจเดŸเดคเตเดคเตเด• เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเด•เตเด•เตเด‚ เดชเดคเดพเด•.เดฌเดธเตเดฑเตเดฑเดกเต.เดตเตเดฏเดพเดœเด‚, เด‡เดคเต เด’เดฐเต เดชเดฟเดถเด•เต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต

  • เด’เดฐเต เดชเดฟเดถเด•เต เดชเดฐเดฟเดงเดฟเดฏเดฟเดฒเตเดฒเดพเดคเต†, เดฎเตเดดเตเดตเตป เด˜เดŸเด• เดŸเตเดฐเต€เดฏเตเด‚ เด…เตบเดฎเต—เดฃเตเดŸเต เดšเต†เดฏเตเดฏเดชเตเดชเต†เดŸเตเด‚

เดคเตเดŸเตผเดจเตเดจเต เดžเด™เตเด™เตพ เดžเด™เตเด™เดณเตเดŸเต† เดชเดฟเดถเด•เต เด…เดคเดฟเตผเดคเตเดคเดฟ เด•เต‹เดกเต เดŽเดดเตเดคเตเดจเตเดจเต (เดชเตเดคเดฟเดฏ เดฒเตˆเดซเต เดธเตˆเด•เตเด•เดฟเตพ เดฐเต€เดคเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต เด˜เดŸเด•เด‚DidCatch); เด‡เดคเต เดชเตเดฐเดงเดพเดจเดฎเดพเดฏเตเด‚ เดกเดพเตป เด…เดฌเตเดฐเดฎเต‹เดตเดฟเดจเตเดฑเต† เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ เดจเตฝเด•เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เด‰เดฆเดพเดนเดฐเดฃเดฎเดพเดฃเต:

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>
    );
  }
}
...

เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เดฑเต†เตปเดกเตผ เดชเดฟเดถเด•เต เดฌเดŸเตเดŸเตบ เด•เตเดฒเดฟเด•เตเด•เตเดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เดซเต‹เตพเดฌเดพเด•เตเด•เต เดฏเตเด เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด’เดฐเต เดชเดฟเดถเด•เต เดธเต†เตปเดŸเตเดฐเดฟเด•เตเด•เต เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

เดฑเดฟเดฏเดพเด•เตเดฑเตเดฑเต เดซเตเดฐเดฃเตเดŸเตโ€ŒเดŽเตปเดกเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เดณเดฟเดฒเต† เดฌเด—เตเด•เดณเตเดŸเต† เดธเต†เตปเดŸเตเดฐเดฟ เดฑเดฟเดฎเต‹เดŸเตเดŸเต เดฎเต‹เดฃเดฟเดฑเตเดฑเดฑเดฟเด‚เด—เต

เดฑเดฟเดฏเดพเด•เตเดฑเตเดฑเต เดซเตเดฐเดฃเตเดŸเตโ€ŒเดŽเตปเดกเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เดณเดฟเดฒเต† เดฌเด—เตเด•เดณเตเดŸเต† เดธเต†เตปเดŸเตเดฐเดฟ เดฑเดฟเดฎเต‹เดŸเตเดŸเต เดฎเต‹เดฃเดฟเดฑเตเดฑเดฑเดฟเด‚เด—เต

เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเด•เตฝ

เดจเดฟเด™เตเด™เตพ เด‡เดคเต เดธเดนเดพเดฏเด•เดฐเดฎเดพเดฃเต†เดจเตเดจเต เดžเดพเตป เดชเตเดฐเดคเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเต.

เดชเดฟ.เดŽเดธเต เด’เดฑเดฟเดœเดฟเดจเดฒเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดฒเดฟเด™เตเด•เต

เดธเต†เตปเดŸเตเดฐเดฟ เดตเดดเดฟ เดชเดฟเดŽเดธเต เดŸเต†เดฒเดฟเด—เตเดฐเดพเด‚ เดšเดพเดฑเตเดฑเต https://t.me/sentry_ru

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•