Fermer

octobre 30, 2018

Construisons un tableau de bord des ventes avec React


Suivez le processus de création, de conception et de présentation d'un tableau de bord des ventes avec les composants natifs de React de KendoReact, complété par une grille réactive, des données, des graphiques et plus encore.

Il peut être difficile de créer des applications Web métiers. même avec des cadres modernes comme React. Heureusement, des bibliothèques d'interface utilisateur telles que Kendo UI peuvent faciliter cette tâche. Dans ce didacticiel, nous allons utiliser KendoReact une bibliothèque de composants d'interface utilisateur natifs spécialement conçus pour React. Si vous avez déjà utilisé des bibliothèques de composants de Progress, vous vous sentirez comme à la maison avec KendoReact. Cependant, si vous n'avez jamais entendu parler de Kendo UI, ce didacticiel montrera ce qui peut être fait rapidement avec la bibliothèque.

Création du tableau de bord des ventes dans KendoReact

Pour cet article, nous allons créer un tableau de bord des ventes pour une entreprise fictive. entreprise. Nous utiliserons un tableau de bord existant disponible sur Github construit avec KendoReact: le tableau de bord kendo-react-sales-sales . Mon objectif est de vous montrer comment créer un tableau de bord similaire à partir de rien.

 Tableau de bord KendoReact "title =" Tableau de bord KendoReact "/> </p>
<p> Notre tableau de bord des ventes présente les produits les plus vendus pour le magasin du pays chaque trimestre de l'année. Chaque mois, je présenterai les données de chaque composant au fur et à mesure de leur construction. </p>
<p> Ce projet couvre les concepts de base de React et de KendoReact en utilisant <a href= Create React App avec des composants natifs de React. faire quelques mises en page de base avec HTML et CSS et espérer construire à partir de ce tutoriel l'avenir avec des concepts plus avancés.

Pour commencer

Nous devons nous assurer que nous avons installé le nœud version 7. ou une version ultérieure, car la dernière version de Create React App en fait une nécessité. L'installation de Node nous permettra d'utiliser npm pour télécharger le gestionnaire de paquetages. Si vous débutez avec Create React App, vous pouvez rafraîchir le dernier en date de cet article: ( Hel lo, Create React App! ) écrit pour mettre les gens au courant avec cet outil permettant de créer des applications React avec une configuration zéro.


Vérifier que le fil est installé:

Le fil est utilisé comme gestionnaire de packages par défaut dans Create React App. Installez-le en utilisant:

 $ npm install yarnpkg -g 

Si vous rencontrez des problèmes pour installer Yarn sous Windows, il suffit de télécharger et d'exécuter le programme d'installation msi ici .


 npx $ créer-réagir-application kendo-réagir-sales-dashboard
$ cd kendo-react-sales-dashboard
$ yarn start 

Une fois l'application Create React démarrée, vous pouvez vérifier l'aspect de notre application dans le navigateur:

 CRA View "title =" CRA View

Nous pouvons maintenant ajouter des packages à aider à créer une mise en page de base pour notre tableau de bord. KendoReact a un thème Matériau que nous pouvons intégrer comme package pour la mise en page. Nous aurons également besoin d’apporter quelques boutons KendoReact, qui vous donneront une idée de la facilité avec laquelle il est facile de manipuler les éléments pour commencer. Puisque Create React App utilise du fil prêt à l'emploi et qu'il me semble que c'est un peu plus rapide pour installer des paquets, je vais utiliser toutes les commandes de fil dans ce tutoriel:

 $ yarn add @ progress / kendo-theme- Matériel
           @ progress / kendo-react-layout
           @ progress / kendo-react-buttons 

Avant d'aller trop loin, j'aimerais partager mon idée de ce à quoi cette application ressemblera. J'ai terminé une esquisse de base à l'aide d'un outil appelé Balsamiq . la disposition des composants sera arrangée.

 Balsamiq Mockup

Généralement, un concepteur et un spécialiste UX développeront un prototype pour donner aux développeurs une bien meilleure idée de la direction de la conception, mais nous sommes sur une MVP budget, donc pour notre tutoriel cette maquette de Balsamiq sera notre guide. Le thème de conception Matériau que nous utilisons nous donnera un style attrayant et des styles d'interface utilisateur polis sans effort. La personnalisation de ces composants est possible, mais nous allons nous en tenir à la valeur par défaut.

Un suivi que j'aime bien faire une fois qu'une maquette est comme celle-ci est de décrire chaque composant et d'organiser ces contours dans une représentation conviviale des lignes et des colonnes. . J'utiliserai cela pour comprendre quelle structure d'éléments et de classes

il me faudra. Dans la présentation ci-dessous, nous avons deux lignes, la première contenant l'en-tête et les boutons. Tout le reste ira dans une nouvelle ligne ci-dessous. La deuxième ligne est divisée en deux colonnes. Et à l'intérieur de la colonne de droite, une autre série de deux lignes, la première comportant trois colonnes et la suivante une seule colonne.

 Layout Balsamiq

Maintenant que nous avons ces croquis, nous pouvons construire le balisez à l'aide d'éléments

et affectez des classes en indiquant le nombre maximum des 12 unités que chaque colonne constituera. Dans la section suivante, je vous présenterai la structure de balisage qui hébergera les composants.

Le code HTML

Compte tenu de la présentation que nous avons vue ci-dessus, j'ai créé une hiérarchie de div . étant donné un className à la manière traditionnelle «grille réactive à 12 colonnes» et simplifié cette idée dans un support visuel. Dans React, nous utilisons l'attribut className au lieu de class chaque fois que nous définissons des classes CSS dans JSX. Par souci de brièveté, je me suis référé uniquement au point d'arrêt xs pour chaque

mais je résume généralement les points d'arrêt nécessaires pour que notre mise en page ne se décale pas lorsque nous redimensionnons la page.

 MockupHTML "title =" MockupHTML "/> </p>
<p> Chacune des balises personnalisées que j'ai mises dans cette image ne sont que des espaces réservés utilisés pour la représentation visuelle, ne copiez donc pas ce code HTML. Encore une fois, ceci est uniquement pour nous aider comprendre la structure dont nous aurons besoin. </p>
<p> Vous verrez de nombreuses balises dans le code HTML que nous remplacerons éventuellement par le composant ou le code HTML dont nous avons besoin. Vous trouverez ci-dessous le code que je souhaite que vous copiiez dans votre application <code>. js </code> page pour nous lancer. </p>
<p> Je vais également vous donner un code CSS à insérer dans votre fichier <code> App.css </code>. Allez-y, remplacez le CSS dans votre <code> Fichier App.css </code> avec le Gist ci-dessous </p>
<p> Enfin, ajoutez bootstrap Pour simplifier les choses, ajoutez un lien vers le <a href= Bootstrap CDN au fichier public / index.html . Ajoutez-le juste en dessous de l'icône de raccourci :

   

Il contient des styles non seulement pour aider avec le code HTML que nous venons de coller. Votre page a également l'air un peu folle en ce moment, mais en réalité tout est en place pour passer à la prochaine étape, ce qui nécessitera de préparer certaines données et d’ajouter nos premiers composants (boutons) de Kendo UI.

Ajout de boutons

Nous avons déjà quelques boutons sur la page, mais nous souhaitons changez-les en boutons Kendo UI car cela nous permettra d’ajouter nos premiers composants Kendo UI et notre thème Matériel Kendo UI. Nous avons déjà ajouté les dépendances, alors allons à notre page App.js et ajoutons le bouton & savePDF juste en dessous de l'importation ReactDOM ] ligne en haut de la page App.js :

 importez ReactDOM à partir de 'react-dom';
importer {Button} depuis '@ progress / kendo-react-buttons';
import {savePDF} de '@ progress / kendo-react-pdf'; 

Nous pouvons câbler le bouton Export to PDF . Installons ces paquets avec Yarn pour y arriver.

 $ yarn add @ progress / kendo-react-pdf
           @ progress / kendo-dessin
           @ progress / kendo-react-buttons 

Modifiez maintenant les deux balises (comme ci-dessous) pour utiliser une lettre majuscule B:


 

Exécutez l'application avec . ] $ yarn start s'il n'est pas déjà lancé. Vous devriez au moins voir le texte et les boutons maintenant.

Exporter au format PDF

Très souvent, nous souhaitons simplement que l’utilisateur puisse imprimer l’ensemble du contenu de la page dans un fichier PDF. Pour ce faire, nous pouvons utiliser le package qui vient d'être importé pour faire tout le travail lourd.

Ajoutez le code suivant à votre classe de composant d'application dans App.js :

 constructeur (accessoires). {
  super (accessoires);
  this.appContainer = React.createRef ();
}

handlePDFExport = () => {
  savePDF (ReactDOM.findDOMNode (this.appContainer), {paperSize: 'auto'});
} 

Avec ce code en place, nous devons lier this.appContainer à un objet, qui est une référence à l'élément HTML contenant la zone à imprimer en PDF.

nous voulons imprimer le tableau de bord complet des ventes, nous allons placer un attribut ref sur le plus extérieur

de notre JSX. Vous pouvez le localiser par son nom className : app-container :
this.appContainer = el}>

L'attribut ref permet attribuer un HTMLDivElement représentant le contenu de l'élément

sur lequel il est placé, à une propriété locale.

Ensuite, nous voudrons nous assurer que nous appelons le handlePDFExport ( ) fonctionne à partir de l'événement onClick . Désactivons également l'autre bouton pour le moment.


 

Nous allons maintenant tester notre bouton pour nous assurer que tout fonctionne correctement. Lorsque vous appuyez sur le bouton, vous devriez recevoir une invite pour télécharger un fichier PDF. Lors de l'ouverture du PDF, vous devriez voir le contenu entier de notre page. Vous pouvez imaginer ce qui se produirait si nous mettions cet attribut sur un autre

de notre page. À ce stade, le bouton imprimera uniquement le contenu de l'élément
. Nous reviendrons sur cette idée une fois que la grille fonctionnera correctement et que nous créerons un bouton qui n’imprimera que la grille de données.

Avant de passer à autre chose, j’aimerais souligner que, dans React, nous souhaitons appeler une fonction dans notre JSX. comme nous l'avons fait avec le gestionnaire onClick nous affectons simplement ce nom de fonction à l'attribut. Pas besoin de guillemets d'invocation de citations, juste le nom de la fonction comme ci-dessous:

 onClick = {this.handlePDFExport} 

Mais attendez? Nos boutons ont tous l'air… meh! Nous avons oublié quelque chose. Nous devons intégrer notre thème Matériel Kendo UI maintenant que nous utilisons actuellement certains composants de Kendo UI sur la page. Une fois le fichier CSS correct importé, tous les autres composants à importer bénéficieront également de ce style.

Importez le thème de matériau situé au bas de nos importations le App.js juste au-dessus. l'importation pour App.css .

 import '@ progress / kendo-theme-material / dist / all.css'; 

Et n'oublions pas que nous devrons intégrer ce thème utiliser le fil pour que cette importation fonctionne.

 $ yarn add @ progress / kendo-theme-material 

Faisons également entrer une classe qui donnera de l'espacement à nos boutons. Il est déjà défini dans les styles que nous avons ajoutés au fichier App.css . Sur le div qui entoure nos boutons, ajoutez de boutons à droite au className . Les boutons et leur div contenant devraient maintenant ressembler à ceci:

Vous devriez maintenant voir vos boutons prendre le style Matériau Design.

 Boutons thématiques à thème "title =" Boutons thématiques à thème "/> </p>
<h2 id= Dialogue de dialogue

Câblons le Dans une application de production réelle, cela parlerait à un service qui pourrait être utilisé pour envoyer un courrier électronique à quelqu'un afin de partager le lien du tableau de bord, mais nous allons simplement le faire imprimer sur la console.

In le constructeur de notre fichier App.js permet de créer un objet à conserver. Cet objet d'état est compris par React comme étant un objet spécial. Sous le capot, React traite cet objet différemment.

 constructeur (accessoires) {
  super (accessoires);
  this.appContainer = React.createRef ();
  this.state = {
    showDialog: false
  }
} 

Créons une fonction dans la classe App sous la fonction handlePDFExport () . Comme je l'ai mentionné Les objets de l'état Réagir sont spéciaux, ils ont une API spécifiquement utilisée pour interagir avec eux. Par exemple, si nous voulons modifier l'état de quelque manière que ce soit, nous ne devrions pas accéder directement à l'objet et attribuer de nouvelles valeurs. Au lieu de cela, nous utilisons la méthode setState pour mettre à jour l'état. Cela planifiera une mise à jour de l'objet d'état d'un composant. Lorsque l'état change, le composant répond par un nouveau rendu.

 handleShare = () => {
  this.setState ({
    showDialog:! this.state.showDialog
  })
}  

CONSEIL PRO: Pour exécuter une fonction ou vérifier si l'état est mis à jour correctement, nous pouvons passer une fonction en tant que second argument (rappel) à setState () la fonction sera exécuté une fois l'état mis à jour. En savoir plus et explorer les documents React pour l’état .

 handleShare = () => {
  this.setState ({
    showDialog:! this.state.showDialog
  }, () => console.log (this.state))
} 

Nous devons également mettre à jour le bouton pour utiliser cette fonction. Nous ajouterons ensuite une caractéristique distinctive en définissant primaire à true . Dans les coulisses, notre composant prend cette valeur true et donne au bouton un style primaire :

 

Ce bouton bascule donc une valeur booléenne dans notre état objet, qui est généralement un bon moyen de masquer et d’afficher des modaux, des fenêtres contextuelles ou des zones cachées de la page. Mais nous devons créer une zone cachée qui se révélera lorsque vous cliquerez sur ce bouton. Comme nous l'avons vu dans notre rappel setState, chaque fois que nous appuyons sur le bouton de partage cette valeur est inversée. Ce bloc HTML que nous allons ajouter devrait être remplacé par le code ci-dessous:

Boîte de dialogue illustrée / masquée avec logique

Remplacez-le par le code suivant:

 {this.state.showDialog &&
  
    

Veuillez saisir l'adresse électronique du destinataire. / 19659093] Share

}

Décryptons ce que nous venons d'ajouter: nous avons introduit un nouveau composant KendoReact appelé

qui est enveloppé dans une expression qui va masquer ou afficher la zone en fonction de la valeur state.showDialog en cours d'inversion. La meilleure façon de penser à cela est que notre composant équivaut à une valeur de vérité. Cela revient à dire:

 {this.state.showDialog && true} 

Donc, parce qu'il est couplé avec le this.state.showDialog si les deux correspondent à true, le dialogue s'affiche. Toutefois, si this.state.showDialog est faux, la sortie du composant

n'est pas révélée. Encore une fois, c’est une façon de penser à cette déclaration si, pour une raison quelconque, elle vous semble étrange.

Le composant

ne fonctionnera pas sans l’importer du package react-dialogs . obtenez-le ajouté et importé:

 $ yarn add @ progress / kendo-react-dialogs
           @ progress / kendo-react-input
           @ progress / kendo-react-intl 

Et nous allons également importer ces paquets dans notre App.js . Nos importations devraient maintenant ressembler à ceci:

 import React, {Component} from 'react';
importer ReactDOM de 'react-dom';

importer {Dialog, DialogActionsBar} depuis '@ progress / kendo-react-dialogs';
importer {entrée} de '@ progress / kendo-react-input';

importer {Button} depuis '@ progress / kendo-react-buttons';
importer {savePDF} de '@ progress / kendo-react-pdf';

importer '@ progress / kendo-theme-material / dist / all.css';
import './App.css';[19659013HERJ'airemarquéquelquechosequimanquaitlorsquej'aicliquésurnosnouveauxboutonsL'interfaceutilisateurdeMaterialDesignaveclaquellej'aitravailléutiliseuneffetd'entraînementsurcertainsélémentsdel'interfaceutilisateurLesboutonsmontrentclairementceteffetd'entraînementetjenelevoispascheznousCeciestdûaufaitqueKendoUIfournitceladansunpackageséparécequiestunebonneidéecarjepeuxounonsouhaiterquelecodesupplémentairesoitajoutéauCSSetàJavaScriptsijenesouhaitepasl'utiliserAjoutonsetimportonsceci  en tant que composant qui enveloppera notre application: 
 $ yarn add @ progress / kendo-react-ripple 

Ceci fait, vous pouvez maintenant importer Ripple dans la page App.js située juste au-dessus des dialogues de et de DialogActionsBar :

 de {Ripple} de '@ progress / kendo-react-ripple'; 

Ensuite, nous voulons ajouter un conteneur autour de l'élément

de app-container afin que tous les Button et d'autres composants obtiennent l'effet d'entraînement comme un enfant de :
la classe App étend le composant {
  constructeur (props) {/ * ... * /}
  handlePDFExport = () => {/ * ... * /}
  
  render () {
    revenir (
      
        
this.appContainer = elem}>           {/ * ... * /}         
);   } } exportation par défaut

Lorsque vous cliquez et faites glisser en dehors de l'état du bouton, puis relâchez-le, vous obtiendrez l'effet sans activer l'événement cliquez sur du bouton.

 Ripple Effect "title =" Ripple Effect "/>  <h2 id= Mmm, Donut Charts

J'aimerais commencer à importer le composant Chart . Il contient le moins de données possible. C'est donc une étape logique et simple.

Ajoutons le composant (commenté) remplaçant l'élément de substitution

Recherchez la ligne de code libellée comme suit:
 

Donut Chart Container

Et remplacez-le par :

 {/ *  * /} 

 Créer un répertoire de composants "title =" Créer un répertoire de composants "/> </p>
<p> Ensuite, ajoutons un répertoire pour tous nos composants de conteneur et appelez-le <code> components </code>et créez à l'intérieur notre premier composant conteneur parmi de nombreux nommés: <code> DonutChartContainer.js </code>. Nous allons continuer avec cette convention de nommage pour chacun de nos composants KendoReact. </p>
<p> Nous devons également importer le package pour les <a href= tableaux de KendoReact :

 $ yarn add @ progress / kendo-react-charts 

Copiez ensuite le code que j'ai modifié de la documentation de l'interface utilisateur de Kendo dans DonutChartContainer.js à partir du résumé ci-dessous:

Les diagrammes KendoReact fournissent un vaste ensemble de fonctionnalités permettant de créer de riches visualisations de données. Pour en savoir plus à leur sujet, n'hésitez pas à consulter l'API Charts .

 Créer un répertoire de données "title =" Créer un répertoire de données "/> </p>
<p> La première chose que nous souhaitons créer pour le <code> le graphique </code> est une donnée fictive.Comme je le disais auparavant, tous nos composants auront besoin de données. Créons un répertoire nommé <code> data </code> en tant que frère de nos <code> composants </code> ] Dans ce répertoire, créez un fichier nommé: <code> appData.js </code>. </p>
<p> N'oubliez pas que l'idée est de montrer quel pourcentage de nourriture (par catégorie) a été vendu au T4. </p>
<ul>
<li><code> foodType </code> catégorie des aliments vendus au quatrième trimestre dans tous les magasins </li>
<li><code> pourcentVente </code> pourcentage représenté sous forme de nombre décimal vendu en tous les magasins du quatrième trimestre </li>
</ul>
<p> Copiez le code ci-dessous dans le fichier <code> appData.js </code>: </p>
<pre><code class= export const donutChartData = [1 9459142];

Dans le fichier App.js nous devons ajouter une importation:

 import {DonutChartContainer} from './components/DonutChartContainer'; 

... et uncomment le {/ * * /} au format HTML.

  

Notre composant devrait maintenant fonctionner. Faisons un changement pour que vous compreniez comment nous pouvons formater l'étiquette pour le graphique en anneau. Pour le moment, nous affichons uniquement la catégorie, car nous l'avons spécifié dans la configuration de nos composants.

Dans le fichier DonutChartContainer.js Modification de la fonction labelTemplate en:

 const labelTemplate. = (e) => (e.category + ' n' + e.value + '%'); 

 Entrez la description de l'image ici

Voici notre magnifique beignet, il a même l'air savoureux! Lorsque nous utilisons le graphique en anneau, nous interagissons avec un composant . L'entrée content accepte une fonction qui renvoie une chaîne. C'est si simple. Il remplit chaque section (les catégories dans notre cas) de richesse en bonté. En utilisant simplement ce que nous savons sur JavaScript, nous pouvons obtenir une meilleure mise en forme et je pense que nous voudrons peut-être utiliser e.percentage au lieu de e.value . Vous pouvez obtenir des détails sur les champs que nous pouvons exploiter dans notre ChartSeriesLabels documenation .

J'ai modifié la fonction de modèle pour obtenir un affichage plus attrayant et en choisissant le pourcentage, je garantis que chaque catégorie représente toujours. sa partie du total. C’est le cas où nous déciderons peut-être d’utiliser des données dont le total n’est pas égal à 100.

 const labelTemplate = (e) => (e.category + ' n' + (e.percentage * 100 ) + '%'); 

L'affichage n'a pas changé ici, je voulais simplement utiliser pourcentage au lieu de valeur .

Augmenter l'élément de graphique à barres

La prochaine étape logique consiste à créer une barre Graphique qui représente une ventilation mensuelle des pourcentages de chaque mois à partir du quatrième trimestre 2018. Le graphique en donut indique le pourcentage moyen sur tout le trimestre, mais notre graphique à barres montrera chaque mois de ce trimestre. Vous trouverez ci-dessous les données que nous devons ajouter à notre fichier appData.js . Vous remarquerez que nos données correspondent également au graphique en anneau, de sorte que l'utilisateur peut facilement voir la relation.

 export const barChartQ4Months = ['October', 'November', 'December'];
export const barChartMonthlyPercentages = [
  { name: 'Beverages', data: [14, 16, 19.5]},
  {nom: 'Condiments', données: [24, 23.5, 24.5]},
  {nom: 'Produce', données: [12.5, 12.5, 14]},
  {nom: 'Viande / Volaille', données: [16, 18, 17]},
  {nom: 'Fruits de mer', données: [21.5, 20, 17]},
  {name: 'Other', données: [7, 12, 11]},
]; 

Avec les données en place, nous pouvons ajouter un nouveau composant conteneur à notre répertoire composants . Créez un fichier nommé BarChartContainer.js .

Remplacez l'élément de substitution

de l'élément. Recherchez la ligne de code qui se lit comme suit:

Bar Chart Container

Et remplacez-la par:

 {/ *  * /} 

Ensuite, copiez le code que je n'ai modifié que légèrement dans les exemples de documentation de Kendo UI et insérez-le dans BarChartContainer.js dans Gist ci-dessous:

Placez une importation dans le haut de la page, juste au-dessus de nos importations CSS dans App. js :

 import {BarChartContainer} de './components/BarChartContainer'; 

... également dans App.js non mis en commentaire {/ * *. /} en HTML.

   

Effectuez une confirmation visuelle rapide pour vous assurer que les lignes du graphique à barres utilisent les mêmes couleurs que le graphique en anneau. Tout devrait s'aligner car nos données pour chaque graphique sont dans le même ordre. Si vous construisiez une API pour servir ces données, vous voudriez vous assurer que rien ne se perdra.

C'est peut-être la plus facile à configurer à ce jour. La page de conteneur est très simple car nous ne traitons avec aucun État. Nous aimons toujours avoir cette couche d’abstraction dans notre projet cependant.

La façon dont je pense à ce composant, c’est que j’observe ma forme de données. Nous avons un éventail de mois, chacun de ces mois se traduisant par une catégorie sur le graphique à barres. Nous avons également un tableau d'objets. Chacun de ces objets a un champ nommé qui correspond à nos catégories d'aliments. Il aura également un champ de données. Donc, pour chaque mois (catégorie sur le graphique à barres), nous itérons sur le premier index de chaque tableau de champs de données. Chaque itération construit une barre dont la hauteur correspond à la valeur de l'index. Cela se répète chaque mois.

Mon conseil à tous ceux qui travaillent avec ce tableau est de prendre cet exemple et de se familiariser avec la manière dont chaque balise du composant joue dans cette histoire de ventilation des données. Nous avons un Légende ChartCategoryAxis & Items ChartSeries & Items, ChartValueAxis & Items et bien sûr le composant englobant, le ChartValueAxis & Items et bien sûr le composant englobant, le Chart lui-même .

La possibilité de piratage informatique sur ces cartes est bien là aussi. Consultez cet article sur Visualisations de données avec Kendo UI pour des idées vraiment sympas d'utilisation des différentes cartes, y compris notre ami M. Bar Chart. Passons maintenant à autre chose.

Ajout du composant Grid

Le conteneur Grid est de loin l'un de nos composants les plus utilisés et les plus demandés dans Kendo UI.

A La liste des produits servira de données pour notre réseau. Nous allons copier l'essentiel ci-dessous et le coller dans appData.js . Cela constituera le top 10 des produits du quatrième trimestre, qui constituent le cœur des données sur lesquelles nous construisons le tableau de bord. Dans une situation plus avancée, la Grid pourrait être remplie par une recherche avec autocomplete et plus de produits pourraient être filtrés ou recherchés, etc. Ce que j'aime de Kendo UI, c'est que la plupart des choses que je peux imaginer

Avant de faire quoi que ce soit, je voudrais vous montrer les paquets que j’ajoute avant d’utiliser la grille :

 $ yarn add @ progress / kendo- requête de données
           @ progress / kendo-react-dateinputs
           @ progress / kendo-react-dropdowns
           @ progress / kendo-react-grid
           @ progress / kendo-react-input
           @ progress / kendo-react-intl 

Cela devrait couvrir tous les éléments dont nous avons besoin pour notre composant gird. Nous en avons déjà installé deux, mais ce n’est que parce que les composants de KendoReact ont parfois des dépendances qui sont également présentes dans d’autres composants.

Ensuite, ajoutons les données à notre fichier appData.js :

En regardant les données, les champs les plus importants de nos objets de données sont les suivants: ID du produit, nom, catégorie, prix, champs en stock et discontinués. J'ai apporté un peu plus de données que nécessaire. C'était dans l'espoir de vous faire jouer avec l'affichage de différents champs et l'expérimentation avec la grille elle-même.

Les composants principaux d'une grille KendoReact sont l'élément même qui contient l'enfant . 19659181] composants, chaque mappage à un champ spécifique de notre objet de données.

Je veux vous donner un rapide aperçu visuel du code de ce composant, donc si je ne voulais afficher que l'ID, le nom et la catégorie de notre ensemble de données , Je pourrais très facilement et presque de la mémoire construire ce composant:

 
  
  
  
 

Et cela ressemblerait à ceci sur la page:

 Grille de base "title =" Grille de base "/> </p>
<p> Ensuite, ouvrez le <code> App.js </code>. fichier et ajoutez le composant en remplaçant l'élément réservé <code></p>
<h4></code>  Recherchez la ligne de code suivante: </p>
<pre><code class=

Grid Container

Et remplacez-le par:

 {/ *  * /} 

L'implémentation de la grille est aussi simple que cela. Dans notre projet, nous allons utiliser un peu plus de propriétés et un dimensionnement de colonne plus important que dans l'exemple ci-dessus. Copiez l'intégralité du composant à partir de l'essentiel ci-dessous. et placez-le dans un nouveau fichier nommé GridContainer.js :

Ajoutez l'importation:

 import {GridContainer} à partir de './components/GridContainer' ;[[19659013hnetmaintenantlaréférenceàlecomposant:
   

 Version 1 du conteneur de grille "title =" Version 1 du conteneur de grille "/> </p>
<p> À ce stade, nous avons le composant <code> Grid </code> qui fonctionne, mais je pense déjà à certaines des choses que je veux faire avec ce composant <code> GridContainer.js </code>et cela impliquera la gestion de l’Etat, bien que je ne veuille rien apporter comme Redux pour le moment, Je devrais peut-être passer d’un composant fonctionnel sans état à un composant basé sur une classe, mais avant d’y aller, je tiens à souligner que nous n’avons jusqu’à présent utilisé que des composants fonctionnels sans état pour créer nos composants. Quelques instants pour expliquer pourquoi et vous expliquer rapidement deux manières de créer des composants dans React. </p>
<h3 id= Composants fonctionnels sans état

Jusqu'à présent, nous utilisions des composants fonctionnels sans état, ou en d'autres termes, des composants définis comme une fonction. Ils ne prennent qu'un seul argument d'objet d'accessoires un Nd ne détiennent aucun de leur propre état - ils n'ont pas de cycles de vie. Jusqu'à présent, aucun état local n'était requis pour nos composants de conteneur. Ils ne servent que de simples conteneurs pour nos composants d’interface utilisateur Kendo. La séparation est bonne pour l'organisation, mais c'est tout. Je veux rapidement vous montrer une autre façon d'écrire un composant fonctionnel en utilisant la fonction de flèche ES6, ce qui nous permettra d'omettre les mots-clés, fonction et le retour ainsi que les accolades. En utilisant cette méthode, un composant pourrait ressembler à ceci:

 const HelloContainer = ({data}) => ([19459001)Bonjour{dataname}!
);

Très utile si nous créons simple les composants de conteneur sans aucun état, et je dois noter que vous devez toujours vous efforcer de vous contraindre à utiliser ces types de composants chaque fois que cela est possible.

Composants de classe

Les composants de classe bénéficient de la possibilité d'avoir un constructeur et de le gérer. leur propre état. La syntaxe ressemble à ceci:

 La classe HelloContainer étend React.Component {
  render () {
    return 
{this.props.name}
;   } }

Si vous souhaitez en savoir plus sur les nombreuses façons de créer des composants dans React, qui va au-delà de ce didacticiel, regardez cette vidéo de Michael Chan .

Jusqu'à présent, nous avons rien de spécial avec le GridContainer.js nous obligeant à utiliser la méthode de classe pour créer des composants. Laissez-moi vous montrer où aller, sachant que je peux utiliser un composant fonctionnel sans état, pour réaliser que j'ai besoin d'un composant basé sur une classe pouvant gérer un état.

Incorporer un graphique sparkline en tant que contenu pour une colonne de grille

Je souhaite ajouter un nouveau à cette composante, et je veux vous montrer un truc sympa qui nous permettra de lier une KendoReact Sparkline de en personnalisant le contenu de la cellule de la grille de KendoReact. To do this we will need to create a randomized set of data to use for the Sparkline component. We can then insert that random data array into the already existing gridData object for each item and make it a property called PriceHistory.

Let's start by converting this component into a class-based component and importing the Sparkline component. Let's swap out our component with the following gist:

Copying in that new code, we went from using export const to using export default classor we went from stateless functional component to class based component. In doing so, we encountered an error. We need to update our import statement in App.js.

import GridContainer from './components/GridContainer';

Learn more about when to use curly braces when importing in ES6.

We added some code to modify the data and add random numbers to an array. We'll create a function, processData() for this purpose and add it to the GridContainer:

processData = (data) => {
  data.forEach((item) => {
    item.PriceHistory = Array.from({length: 40},() => Math.floor(Math.random()*100));
    return item;
  })
  return data;
}

The property, PriceHistoryis now available when the Grid is rendered. We can see this by placing a debugger; statement before the return data; line in our new function and then opening the Chrome DevTools and inspecting that data object. Now we just need a Sparkline that can use the new PriceHistory property.

We are going to build another component inside our GridContainer.js file because this new component will only be used here in this file. Just under the import statements, create a new exported class with the following code:

class SparkLineChartCell extends React.Component {
  render() {
    return ()
  }
}

Next, add the new column to the Grid component, just above the discontinued column:

Just in case you have any issues I have created a gist for GridContainer.jsshowing what it should look like at this point. And just like that, we have Sparkline component rendering inside of a column in each Grid row:

Grid Container Version Three" title="Grid Container Version Three"/></p>
<h2 id=Adding PanelBar Navigation

Before getting started, we need to install a package:

$ yarn add @progress/kendo-react-layout

The data is very straightforward. Let's copy that into the appData.js file. The shape of the data is an object with two top level nodes containing arrays as values.

Let's add the PanelBarContainer component. Once it's completely implemented, we will be able to use it to affect some of the other states in the application to demonstrate some interactivity. But first we need to get the component working and we need to bring in some additional styles for the Teammate's section of the PanelBarContainer. Copy the code in this Gist and add it to the bottom of the App.css page:

Now we just need to copy the Gist below and paste into our PanelBarContainer.js component:

Once that's done being copied into PanelBarContainer.jswe need to add the import to App.js for the PanelBarContainer:

import PanelBarContainer from './components/PanelBarContainer';

And replace the

element for the PanelBarContainer:

We will also need to add some profile images for each team member, I have created a small zip file that has some images already sized correctly that you can use: profile_images.zip.

After you have downloaded those images, add them to a public/img directory in your project for any static files like logos, graphics, images, etc. The public directory is the right place for these.

Our new component should look like this:

Panel Bar" title="Panel Bar"/></p>
<p>At this point we have done a lot of work, and the dashboard is laid out in a manner that will look decent on medium and large sized screens (960px and up). It also can do some adjusting to lower resolution screens, but the team member section in particular could use some additional media queries to help accommodate lower resolutions.</p>
<p>A few things that we could do to expand this demo is add some interactivity, or refactor to work with Redux, and we could also build an API to serve up our data. And I'd like to implore you to explore these options and let us know what you think about our components in the comments section. Also let us know if you would like to see this demo taken further with more advanced concepts we could build.</p>
<h3>Try Out KendoReact</h3>
<p>We've accomplished all this with the help of <a href=KendoReactwhich we've built from the ground up with native UI components so you can build beautiful React apps quickly. Feel free to download a free 30 day trial today and explore everything KendoReact can do.

Start My KendoReact Trial


Comments are disabled in preview mode.




Source link