د عکس العمل فرنټ اینډ غوښتنلیکونو کې د بګونو سینټري ریموټ څارنه

موږ د سینټري سره د عکس العمل په کارولو سره سپړنه کوو.

د عکس العمل فرنټ اینډ غوښتنلیکونو کې د بګونو سینټري ریموټ څارنه

دا مقاله د یوې لړۍ برخه ده چې د مثال په کارولو سره د سینټري غلطیو راپور ورکولو سره پیل کیږي: د 1 برخه.

د عکس العمل پلي کول

لومړی موږ اړتیا لرو د دې غوښتنلیک لپاره نوې سینټري پروژه اضافه کړو؛ د سینټری ویب پاڼې څخه. پدې حالت کې موږ عکس العمل غوره کوو.

موږ به خپل دوه بټونه بیا پلي کړو، هیلو او ایرر، د عکس العمل سره په غوښتنلیک کې. موږ د خپل سټارټر غوښتنلیک په جوړولو سره پیل کوو:

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 څخه) د ډاکس فولډر کارولو لپاره د بادار څانګې

  3. GitHub ته بدلونونه فشار ورکړئ

تبصره: وروسته له دې چې زه پوه شوم چې زه څه کارولو ته اړتیا لرم create-create-app د اپلیکیشن پیل کولو لپاره د کور پاڼې فعالیت. په package.json کې د لاندې اضافه کولو لپاره لاندې راغلی:

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

د روان غوښتنلیک وروستۍ نسخه دلته شتون لري:

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

د نیول شوي کیګونو بیلګه

راځئ چې د هیلو تڼۍ په کلیک کولو سره لاړ شو.

د عکس العمل فرنټ اینډ غوښتنلیکونو کې د بګونو سینټري ریموټ څارنه

د یوې تېروتنې سره چې داسې ښکاري:

د عکس العمل فرنټ اینډ غوښتنلیکونو کې د بګونو سینټري ریموټ څارنه

مشاهدات:

  • دا د بګ راپور روښانه نه شي، براوو.

د غلطیو لپاره د بې حسابه بیلګه

په ورته ډول، راځئ چې د تڼۍ کلیک له لارې لاړ شو تېروتنه.

د عکس العمل فرنټ اینډ غوښتنلیکونو کې د بګونو سینټري ریموټ څارنه

د یوې تېروتنې سره چې داسې ښکاري:

د عکس العمل فرنټ اینډ غوښتنلیکونو کې د بګونو سینټري ریموټ څارنه

د بې حسابه غلطیو ښه اداره کول (راینډینګ)

د خطا د محدودیتونو پیژندنه

د کارن انٹرفیس په برخه کې د جاوا سکریپټ تېروتنه باید ټول غوښتنلیک مات نه کړي. د React کاروونکو لپاره د دې ستونزې د حل لپاره، React 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>
    );
  }
}
...

په هرصورت، د Render Error تڼۍ کلیک کول د فال بیک UI ښکاره کوي او سینټري ته د تېروتنې راپور ورکوي.

د عکس العمل فرنټ اینډ غوښتنلیکونو کې د بګونو سینټري ریموټ څارنه

د عکس العمل فرنټ اینډ غوښتنلیکونو کې د بګونو سینټري ریموټ څارنه

بشپړ کول

زه امید لرم چې تاسو دا ګټور موندلی.

PS اصلي ته لینک

د سینټری له لارې د PS ټیلیګرام چیٹ https://t.me/sentry_ru

سرچینه: www.habr.com

Add a comment