IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

React Discussion :

React et TS récupérer objets depuis fetch


Sujet :

React

  1. #1
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    1 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 066
    Points : 2 569
    Points
    2 569
    Par défaut React et TS récupérer objets depuis fetch
    Bonjour,

    Je débute en React comme je viens de Java j'ai préféré TypeScript.

    Je suis toujours un peu perdu par les différences

    Je souhaite récupérer avec fetch mes objets en JSON depuis un services web

    J'ai écrit le code suivant.
    J'ai aussi un fichier pour mon model
    Mais il y a un truc qui bloque et je suis perdu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    ...
    import React, { FunctionComponent, useEffect, useState } from 'react';
     
          const App: FunctionComponent = () => {
         //* const [journaux, setName] = useState('');
         const [journaux, setJournaux] = useState<Journal[]>([]);
     
         useEffect(() => {
            fetch('http://localhost:8080/journal/getAll').then(function (response) {
             return response.text();
          }).then(function (texte) {
          return JSON.parse(texte);
    }).then(
             journaux => setJournaux(journaux));
          })
     
         return (
             <div>
     
                Il y a [jjournaux.length] dans la base.
                                                                                 <h1>Liste des journaux</h1>
                                                                                 </div>
           );
         }
          export default App;
    Si vous avez une idée merci par avance

    Cordialement
    Consultez mes articles sur l'accessibilité numérique :

    Comment rendre son application SWING accessible aux non voyants
    Créer des applications web accessibles à tous

    YES WE CAN BLANCHE !!!

    Rappelez-vous que Google est le plus grand aveugle d'Internet...
    Plus c'est accessible pour nous, plus c'est accessible pour lui,
    et meilleur sera votre score de référencement !

  2. #2
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    Par défaut
    Hello, tu peux dire ce qui bloque ?
    on ne dit pas "ça ne marche pas" on dit "je suis incapable de faire fonctionner correctement les outils mis à ma disposition"
    Pas de question technique par MP

  3. #3
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    1 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 066
    Points : 2 569
    Points
    2 569
    Par défaut
    Bonjour,

    Le problème est que "jjournaux.length" affiche 0.

    Comme si l'affectation dans le fetch avec la valeur retournée par le web service n'avait pas affecté.

    Le service est en Spring et marche

    De plus j'ai un avertissement qui m'inquièete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    'journaux' is assigned a value but never used.
    Cordialement
    Consultez mes articles sur l'accessibilité numérique :

    Comment rendre son application SWING accessible aux non voyants
    Créer des applications web accessibles à tous

    YES WE CAN BLANCHE !!!

    Rappelez-vous que Google est le plus grand aveugle d'Internet...
    Plus c'est accessible pour nous, plus c'est accessible pour lui,
    et meilleur sera votre score de référencement !

  4. #4
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    Par défaut
    jjournaux vs journaux ?
    on ne dit pas "ça ne marche pas" on dit "je suis incapable de faire fonctionner correctement les outils mis à ma disposition"
    Pas de question technique par MP

  5. #5
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    1 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 066
    Points : 2 569
    Points
    2 569
    Par défaut
    Bien vu et y avait aussi des crochets à la place des accolades dans le jsx

    Je suis pas encore bienhabitué à travailler avec VS code et type scripte
    J'identifie mieux les erreurs avec Eclipse et Java
    C''est un coup à prendre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    import Journal from './models/Journal';
     
    import React, { FunctionComponent, useEffect, useState } from 'react';
     
    const App: FunctionComponent = () => {
       //* const [journaux, setName] = useState('');
       const [journaux, setJournaux] = useState<Journal[]>([]);
     
       useEffect(() => {
          fetch('http://localhost:8080/journal/getAll').then(function (response) {
             return response.text();
          }).then(function (texte) {
             return JSON.parse(texte);
          }).then(
             journaux => setJournaux(journaux));
       })
     
       return (
          <div>
             <h1>Liste des journaux</h1>
             Il y a {journaux.length} journaux dans la base.
     
             <ol> {
                journaux.map((journal) =>
                   <li>{journal.code} - {journal.libelle}</li>
                )}                              </ol>
          </div>
       );
    }
    export default App;
    Comment je peux sortir proprement le fetch en TS?

    Je fais une fonction qui retourne un tableau ou le JSON et un tableau vide en cas d'erreurs ?

    Je peux sortir après le code jsx
    Consultez mes articles sur l'accessibilité numérique :

    Comment rendre son application SWING accessible aux non voyants
    Créer des applications web accessibles à tous

    YES WE CAN BLANCHE !!!

    Rappelez-vous que Google est le plus grand aveugle d'Internet...
    Plus c'est accessible pour nous, plus c'est accessible pour lui,
    et meilleur sera votre score de référencement !

  6. #6
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    Par défaut
    alors je sais pas trop ce que tu entends par sortir proprement le fetch en ts.

    Mais si ta question c'est comment isoler, tu peux faire une fonction useJournaux (pas testé):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    // useJournaux.ts
    export default function useJournaux(): ReturnType<typeof useState<Journal[]>> {
      const [journaux, setJournaux] = useState<Journal[]>([]);
      useEffect(() => {
         fetch('http://localhost:8080/journal/getAll').then(function (response) {
            return response.text();
         }).then(function (texte) {
            return JSON.parse(texte);
         }).then(
            journaux => setJournaux(journaux));
      });
      return [journaux, setJournaux];
    }
    Si la question c'est comment obtenir un type après le fetch, pareil pas testé, mais un truc comme ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    export default async function useJournaux(): ReturnType<typeof useState<Journal[]>> {
      const response = await fetch('http://localhost:8080/journal/getAll');
      type JSONResponse = {
        data: Journal[]
      };
      const { data }: JSONResponse = await response.json();
      setJournaux(response.data);
    });
    }
    on ne dit pas "ça ne marche pas" on dit "je suis incapable de faire fonctionner correctement les outils mis à ma disposition"
    Pas de question technique par MP

  7. #7
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    1 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 066
    Points : 2 569
    Points
    2 569
    Par défaut Bonjour,
    Merci pour tes réponses.

    En f ait je pensais faire une fonction un DAO, qui retournerait les objets(gettAll, get, delettte,...).
    Mais sans que cette dernière intervienne sur le state.
    Sauf que pour l'instant le seul but que je vois de récupérer mes données via les services est de les stocker dans un state.

    Comme je débute en front JavaScript je suis un peu perdu.
    J'ai pris l'option TypeScript, car je suis habitué au typage fort, qui me sécurise

    Car là c'est encore du bricolage je ne peux pas laisser le fetch dans App, sinon ça va vite devenir le boxon.

    Cordialement
    Consultez mes articles sur l'accessibilité numérique :

    Comment rendre son application SWING accessible aux non voyants
    Créer des applications web accessibles à tous

    YES WE CAN BLANCHE !!!

    Rappelez-vous que Google est le plus grand aveugle d'Internet...
    Plus c'est accessible pour nous, plus c'est accessible pour lui,
    et meilleur sera votre score de référencement !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 09/09/2010, 11h39
  2. [MVC] Récupérer un resource handler vers un objet depuis un formulaire
    Par Momo-Arusten dans le forum Spring Web
    Réponses: 0
    Dernier message: 25/02/2009, 12h05
  3. Récupérer un objet depuis un Datatable
    Par tomy29 dans le forum JSF
    Réponses: 5
    Dernier message: 12/08/2008, 17h29
  4. Réponses: 8
    Dernier message: 20/06/2008, 14h04
  5. Récupérer un objet depuis Internet
    Par hemipsy dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 04/01/2007, 09h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo