Tracking errores React application utens uigilias seruauit

Tracking errores React application utens uigilias seruauit

Hodie narrabo tibi de errore verae temporis in applicatione React vestigia. Applicatio ante-finem non typice usus est pro errore tracking. Alie manipulos saepe exuunt sequi cimex, ad id reddens post documenta, probationes, etc. Attamen si productum tuum in melius mutare potes, mox fac!

1. Cur vigiliis opus est?

Pono interesse in tracking bugs in productionem

Satisne hoc tibi videtur?

Bene, inspice singula.

Top rationes pro developers utendi custodiae:

  • Permittit te vitare pericula cum codice errores disponas
  • Auxilium QA cum codice temptationis
  • Accipite velox notificationes circa difficultates
  • Facultatem cito corrigere errores
  • Questus opportunum ostentationem errorum in tabula admin
  • Sort errores usoris / segmenti pasco

Causa principalis CEO / plumbum project

  • Salvum pecuniam (excubiae potest installed in servers)
  • Questus user feedback
  • Intellectus quid mali tuum project in ipsa hora?
  • Intelligentes numerum problems homines cum app
  • Adiuva te invenire loca in quibus tincidunt tua errata fecerunt

Puto tincidunt in hoc articulo primo interesse. Hoc indice causarum etiam uti potes ut bulla tua persuadeat ut vigilem perficiat.

Diligenter cum ultimo item in negotio album.

Tu iam quaero?

Tracking errores React application utens uigilias seruauit

Quid est uigilia?

Vigilia est fons apertus cimex applicationis semita quae tincidunt semitam adiuvat et figere fragores in tempore reali. Noli oblivisci quod applicatio permittit te ut efficientiam augeat et experientiam usoris meliorem efficiat. Excubiae subsidia JavaScript, Nodus, Python, PHP, Ruby, Java et aliae linguae programmantes.

Tracking errores React application utens uigilias seruauit

2. Login et creare project

  • Aperi custodiae causa. You may have to log in. (Quaeso nota quod excubiarum in servientibus tuis institui potest)
  • Proximus gradus est creare project
  • Linguam tuam ex indice elige. (Iens eligere React. Click "Create Project")

Tracking errores React application utens uigilias seruauit

Applicatio domicilii tui. Exemplar fundamentale quomodo vigilem in vas integrandum infra videri potest:

import * as Sentry from '@sentry/browser';
// Sentry.init({
//  dsn: "<https://[email protected]/1432138>"
// });
// should have been called before using it here
// ideally before even rendering your react app 

class ExampleBoundary extends Component {
    constructor(props) {
        super(props);
        this.state = { error: null };
    }

    componentDidCatch(error, errorInfo) {
      this.setState({ error });
      Sentry.withScope(scope => {
        Object.keys(errorInfo).forEach(key => {
          scope.setExtra(key, errorInfo[key]);
        });
        Sentry.captureException(error);
      });
    }

    render() {
        if (this.state.error) {
            //render fallback UI
            return (
              <a onClick={() => Sentry.showReportDialog()}>Report feedback</a>
            );
        } else {
            //when there's not an error, render children untouched
            return this.props.children;
        }
    }
}

Veneficus excubiae utilem habet ad te adiuvandum instar sicco quod tibi faciendum est. Sequi potes hos gradus. Cupio tibi ostendere quomodo primum tractum erroris creasti. Magna, posuere consilium! Lets 'movere ad gradum proximum progredi

3. React ac uigilias seruauit integrationem

Instituere debes npm sarcina in incepto tuo.

npm i @sentry/browser

Initialize custodiae in vase:

Sentry.init({
 // dsn: #dsnUrl,
});

DSN in Projects -> Optiones -> Client Keys. Potes invenire claves clientium in talea quaerendi.

Tracking errores React application utens uigilias seruauit

componentDidCatch(error, errorInfo) {
  Sentry.withScope(scope => {
    Object.keys(errorInfo).forEach(key => {
      scope.setExtra(key, errorInfo[key]);
    });
    Sentry.captureException(error);
 });
}

4. mauris primus error

Exempli causa, applicatione musicae simplicis usus sum cum Deezer API. Potes videre eam hic. Errorem creare opus est. Uno modo est accedere ad proprietatem "indefinitam"

Nos postulo ut creare button vocat console.log с user.email. Quo facto errorem nuntium recipiamus: Uncaught TypeError (non legere res indefinita email) ex numero user rei. Etiam uti potes Javascript exceptione.

<button type="button" onClick={() => console.log(user.email)}>   
  Test Error button 
</button>

Totus continens hoc sic spectat:

import React, { Component } from "react";
import { connect } from "react-redux";
import { Input, List, Skeleton, Avatar } from "antd";
import * as Sentry from "@sentry/browser";
import getList from "../store/actions/getList";

const Search = Input.Search;

const mapState = state => ({
  list: state.root.list,
  loading: state.root.loading
});

const mapDispatch = {
  getList
};

class Container extends Component {
  constructor(props) {
    super(props);

    Sentry.init({
      dsn: "https://[email protected]/1417586",
    });
  }

  componentDidCatch(error, errorInfo) {
    Sentry.withScope(scope => {
      Object.keys(errorInfo).forEach(key => {
        scope.setExtra(key, errorInfo[key]);
      });
      Sentry.captureException(error);
    });
  }
  render() {
    const { list, loading, getList } = this.props;
    const user = undefined;
    return (
      <div className="App">
        <button
          type="button"
          onClick={() => console.log(user.email)}
        >
          test error1
        </button>
        <div onClick={() => Sentry.showReportDialog()}>Report feedback1</div>
        <h1>Music Finder</h1>
        <br />
        <Search onSearch={value => getList(value)} enterButton />
        {loading && <Skeleton avatar title={false} loading={true} active />}
        {!loading && (
          <List
            itemLayout="horizontal"
            dataSource={list}
            locale={{ emptyText: <div /> }}
            renderItem={item => (
              <List.Item>
                <List.Item.Meta
                  avatar={<Avatar src={item.artist.picture} />}
                  title={item.title}
                  description={item.artist.name}
                />
              </List.Item>
            )}
          />
        )}
      </div>
    );
  }
}

export default connect(
  mapState,
  mapDispatch
)(Container);

Post hanc bullam integrationem, eam in navigatro probare debes.

Tracking errores React application utens uigilias seruauit

Primum errorem habemus

Tracking errores React application utens uigilias seruauit

Whoo-hoo!

Tracking errores React application utens uigilias seruauit

Si errorem capitis deprimas, ACERVUM vestigium videbis.

Tracking errores React application utens uigilias seruauit

Mandata mala spectant. Utique vidimus errorem epistulae sine intellectu ubi in codice est. Defaltam loquimur de fonte mappae in ReactJS quia non configuratur.

Volumus etiam instructiones praebere ad fontem tabulae constituendae, sed hoc articulum multo longiorem fore quam institueram.

Studere potes hunc locum hic. Si interest in hoc articulo, Dmitry Nozhenko secundam partem de fonte mappae integrationis publici iuris faciet. Sic, ferire plura similia et subscribo Dmitry Nozhenkout non deesset secundae.

5. Ritus Variegatum ad extremum punctum API

OK. Teximus exceptionem html in praecedentibus paragraphis. Sed quid faciemus de XHR erroribus?

Consuetudo etiam uigiliarum errorum tractatio habet. Usus sum ad indagandum api errores.

Sentry.captureException(err)

Errorem nominis, gradus, notitias addere potes, utens applicatione, electronica, etc.

superagent
  .get(`https://deezerdevs-deezer.p.rapidapi.com/search?q=${query}`)
  .set("X-RapidAPI-Key", #id_key)
  .end((err, response) => {
    if (err) {
      Sentry.configureScope(
        scope => scope
          .setUser({"email": "[email protected]"})
          .setLevel("Error")
      );
      return Sentry.captureException(err);
    }

    if (response) {
      return dispatch(setList(response.body.data));
    }
  });

Vellem munus generale pro captura API uti.

import * as Sentry from "@sentry/browser";

export const apiCatch = (error, getState) => {
  const store = getState();
  const storeStringify = JSON.stringify(store);
  const { root: { user: { email } } } = store;

  Sentry.configureScope(
    scope => scope
      .setLevel("Error")
      .setUser({ email })
      .setExtra("store", storeStringify)
  );
    // Sentry.showReportDialog(); - If you want get users feedback on error
  return Sentry.captureException(error);
};

Hoc munus in api vocatione importare.

export default query => (dispatch, getState) => {
  superagent
    .get(`https://deezerdevs-deezer.p.rapidapi.com/search?q=${query}`)
    .set("X-RapidAPI-Key", #id_key)
    .end((error, response) => {
      if (error) {
        return apiCatch(error, getState)
      }

      if (response) {
        return dispatch(setList(response.body.data));
      }
    });
};

Modi scriptor reprehendo:

  • setLevel permittit ut libram errorem in ashboardday vigilem inserere. Proprietates habet - 'fatalem', 'errorem', 'monitionem', 'logum', 'info, 'debug', 'criticam').
  • setUser adiuvat ut aliquem user notitia (id, inscriptio electronica, consilium solucionis, etc.).
  • setExtra permittit tibi ut cuiuslibet notitiae specificae, verbi gratia, copia.

Si vis usoris opiniones de cimex acquirere, functionis showReportDialogum uti debes.

Sentry.showReportDialog();

conclusioni,

Hodie uno modo descripsimus ut vigilem integraret in applicatione React.

Curabitur β†’ Telegram by Variegatum

Source: www.habr.com