Caricamento pagine React

di il
30 risposte

30 Risposte - Pagina 2

  • Re: Caricamento pagine React

    17/08/2023 - tonyven1 ha scritto:


    Ho una textbox dove se inserisco un nome mi visualizza il nome , se la casella è vuota mi deve dire di inserire qualcosa. Mi sono stoppato proprio qui perchè non funziona con la textbox vuota. 

    Credo ci siano diverse cose che non fanno: il valore di ritorno della funzione App() deve essere un componente React e relativi figli che rappresentano l'interfaccia da mostrare.

    17/08/2023 - tonyven1 ha scritto:


    setValore(e.target.value) 
    return( <> {valore ==='' ? (<p>Devi inserire il nome</p>) : valore} // Condizione che non funziona </> ); }

    Con il codice scritto così, nella funzione che dovrebbe restituire l'interfaccia vai a impostare lo stato di valore con target.value e restituisci un'interfaccia che è formata dal paragrafo, quindi stai dicendo a React che tutto ciò che sta visualizzando va sostituito interamente con quel contenuto, perdendo di fatto il form e tutto il resto.

    Il principio di funzionamento di React prevede che la funzione restituisca l'interfaccia completa da mostrare, nella quale si possono applicare condizioni per determinare se un elemento è visibile oppure no: NON puoi fare il rendering di un solo pezzo all'interno di una funzioncina aspettandoti che React immagini da solo dove questa deve andare a finire nel complesso della UI che si sta producendo.

  • Re: Caricamento pagine React

    Allora debbo dedurre che cosi modificato anche se funziona non va bene?

  • Re: Caricamento pagine React

    18/08/2023 - tonyven1 ha scritto:


    Allora debbo dedurre che cosi modificato anche se funziona non va bene?

    Indicativamente ti direi di sì, ma bisognerebbe vedere il codice finale.

    Diciamo che se hai messo la condizione nell'unico return che dovresti avere nella funzione del componente, questo va bene.
    Si dovrebbe verificare che il resto del codice sia formalmente corretto.

  • Re: Caricamento pagine React

    Ciao. Ti ringrazio per la collaborazione. A questo punto cerco di finire l'esercizio e posto il codice finito. Grazie

  • Re: Caricamento pagine React

    Questo è l'esercizio fatto finora. Ho cambiato alcune cose rispetto a come l'avevo impostato prima. Al momento mi trovo in difficoltà nell'implementare la logica che mi permetta di visualizzare un' alert a seconda di quale campo rimane vuoto. Comunque ecco il codice. Ho provato a usare CodePen ma devo ancora capire se è possibile farlo. Magari se possibile avere qualche consiglio. Grazie

    import './App.css';
    import { useState } from 'react';
    
    function FormVal(){
     
      const [nome, setNome]=useState('');
      const [cognome , setCognome]=useState('');
      const [telefono ,setTelefono]=useState('');
      const [mail , setMail]=useState('');
    
      function Nome(e){
        setNome(e.target.value);
      }
    
      function Cognome(e){
        setCognome(e.target.value);
      }
    
      function Telefono(e){
        setTelefono(e.target.value);
      }
    
      function Mail(e){
        setMail(e.target.value);
      }
      
      function ValidaAlert(){
    
        if (nome ==='' || cognome ==='' || telefono ==='' || mail ===''){
          return(
            <p>
              {alert('Devi inserire: \n nome \n cognome \n telefono \n email' )}
            </p>
          );
        } else if(nome ===''){
         return(
          <p> {alert('Devi inserire il nome')}
            </p>
         );
      } else if (cognome ===''){
        return(
          <p>
            {alert('Devi inserire il cognome')}
          </p>
        );
      } else if (telefono ===''){
        return(
          <p>
            {alert('Devi inserire il telefono')}
          </p>
        );
      }else if (mail ===''){
        return(
          <p>
            {alert("Devi inserire l'email")}
          </p>
        );
      }
    }
    
      return(
        <>
    <h1 className="titolo">Pagina inserimento dati</h1>
          <label className="et1" >Nome</label>
          <input type="text"  onChange={Nome}className="nome" id='nome' ></input><br />
    
          <label className="et1" >Cognome</label>
          <input type="text"  onChange={Cognome} className="nome" id='cognome' ></input><br />
          
          <label className="et1" >Telefono</label>
          <input type="text"  onChange={Telefono} className="nome" id='cognome' ></input><br />
    
          <label className="et1" >Email</label>
          <input type="text"  onChange={Mail} className="nome" id='cognome' ></input><br />
        
          <button   onClick={ValidaAlert} className='btn'>Valida con Alert</button>
          <button  className='btn'>Valida con pagina nuova</button>
        </>
      );
    } 
    
    
    
    export default function App() {
      
      return(
      <>
      <FormVal 
        />
    
        </>
    );
    } 
  • Re: Caricamento pagine React

    20/08/2023 - tonyven1 ha scritto:


    Al momento mi trovo in difficoltà nell'implementare la logica che mi permetta di visualizzare un' alert a seconda di quale campo rimane vuoto.

    In proposito, posso darti due consigli.

    Il primo: tutte le cose che vanno fatte “a fronte del rendering”, cioè quando è necessario aggiornare il componente, ma che “non hanno a che vedere con il rendering”, ossia non sono istruzioni che definiscono quali elementi fanno parte dell'interfaccia utente (inteso quella mostrata nella pagina sottoforma di nodi HTML del DOM) vanno gestiti usando l'hook useEffect().

    Il secondo, che integra e in parte risolve specificatamente la tua problematica: non usare alert(). :)

  • Re: Caricamento pagine React

    Ok. Così giusto per sapere ,ma è meglio usare il debug del browser o quello di visualstudio? In ultimo l'esercizio mi chiede di usare finestre pop up. Ecco il testo dell'esercizio:

    /* Esercizio JS0013T

    Aggiungere gestori di eventi JavaScript al modulo per convalidare (come descritto in seguito) i dati

    di un form (nome, nickname, codice fiscale, email e password) prima dell'invio. Se c'è un problema,

     visualizzare il problema con la pagina in tutti i seguenti modi:

    una finestra pop-up box

    visualizzazione dei problemi in una nuova pagina con testo in rosso e utilizzare il pulsante Indietro

     per chiudere la nuova pagina e tornare alla pagina originale

    visualizzazione dei problemi nella finestra corrente alla parte superiore della pagina in rosso

    visualizzazione il problema in un altro frame della pagina.

    Specifiche per la convalida:

    Verificare che siano presenti tutti i dati richiesti.

    Verificare che l'indirizzo e-mail contenga il simbolo @.

    */

  • Re: Caricamento pagine React

    21/08/2023 - tonyven1 ha scritto:


    Ecco il testo dell'esercizio […]

    Non so da dove arriva questo esercizio, ma di sicuro ha poco senso, soprattutto ai giorni nostri: i popup sono bloccati, e usare un frame per visualizzare errori di validazione è alquanto insolito; nulla di queste soluzioni prevede l'uso di alert(), tuttavia.

    Sono comunque soluzioni poco efficaci, non adattive/responsive, e sicuramente non verrebbero implementate tutte assieme in una volta.

    L'uso di React avrebbe senso se gli errori di validazione apparissero nella pagina, vicino ai controlli errati o in un elenco a parte, magari in una dialog ricavata nella pagina stessa: per tutte le modalità espresse, l'uso o meno di React è perfettamente inutile, se non un ostacolo all'implementazione, fermo restando che sono tutte soluzioni deprecate… anzi, deprecabili. :)

  • Re: Caricamento pagine React

    Ciao. Credo di aver finito l'esercizio, ma mi rimane da capire perchè il text dell'inserimento della mail non funziona. E' come se non ci fosse. Tutte le altre textbox funzionano come dovrebbe tranne il campo dell'email e non riesco a capire come mai. Eppure ha le stesse identiche caratterische delle altre texbox:

    import './App.css';
    import { useState } from 'react';
    
    export default function App() {
    
      const [nome, setNome]=useState('');
      const [cognome , setCognome]=useState('');
      const [telefono ,setTelefono]=useState('');
      const [mail , setMail]=useState('');
    
      function Nome(e){
        setNome(e.target.value);
     }
    
     function Cognome(e){
       setCognome(e.target.value);
     }
    
     function Telefono(e){
       setTelefono(e.target.value);
     }
    
     function Mail(e){
       setMail(e.target.value);
     }
      
     function FormVal(){
    
    let num= parseInt(telefono);
    let testo=document.getElementById('vis');
    
      if(nome ==='' && cognome==='' && telefono===''&& mail===''){
        return(
        <p> 
            {testo.innerHTML='Inserisci i dati'}
        </p>
        );
        
          }else  if(nome ===''){
         return(
          <p> 
            {testo.innerHTML='Inserisci il nome'}
          </p>
         );
      } else if (cognome ===''){
        return(
          <p>
            {testo.innerHTML='Inserisci il cognome'}
          </p>
        );
      } else if (telefono ==='' ){
        return(
          <p>
            {testo.innerHTML='Inserisci il telefono'}
          </p>
        );
         } else if(!isNaN (num) ){
          return (
            <p>
              {testo.innerHTML=''}
            </p>
          );
    
      }else if(typeof telefono ==='string'  ){
        return(
          <p>
            {testo.innerHTML='Il campo telefono deve essere numerico'}
          </p>
    
        );
    
       }else if(mail ===''){
        return(
          <p>
           {testo.innerHTML='Inserisci  email'}
          </p>
        );
      } 
      
     }
    
    
      return(
        <>
    <h1 className="titolo">Pagina inserimento dati</h1>
    <table className="table">
      <tr>
        <td>
          <label className="et1" >Nome</label>
          </td>
          <td>
          <input type="text"  onChange={Nome} className="txt" id='nome' required></input>
          </td>
     </tr>
     <tr>
       <td>
          <label className="et1" >Cognome</label>
          </td>
          <td>
          <input type="text"  onChange={Cognome} className="txt" id='cognome' required></input>
          </td>
      </tr>
    
    <tr>     
      <td>
          <label className="et1" >Telefono</label>
          </td>
          <td>
          <input type="text"  onChange={Telefono} className="txt" id='telefono' required></input>
          </td>
     </tr>
     <tr>
     <td>
          <label className="et1" >Email</label>
          </td>
          <td>
          <input type="text"  onChange={Mail} className="txt" id='mail' ></input>
          </td>
          </tr>
          </table>
          <button   onClick={FormVal} className='btn'>Valida</button><br />
         <h1> <div id='vis' className="vis1"></div></h1>
      </>
      );
    } 
    
  • Re: Caricamento pagine React

    28/08/2023 - tonyven1 ha scritto:


    Credo di aver finito l'esercizio, ma mi rimane da capire perchè il text dell'inserimento della mail non funziona. […]

    No, non ci siamo: React non si usa assolutamente così.

    Brevemente…

    let testo=document.getElementById('vis');

    Questo codice non è ammesso: non si attribuiscono ID agli elementi, e non si accede direttamente al DOM!

    if(nome ==='' && cognome==='' && telefono===''&& mail===''){
        return(
        <p> 
            {testo.innerHTML='Inserisci i dati'}
        </p>
        );

    Anche qui, questa parte di codice non ha nessun senso. Il compito della funzione è restituire (usando la sintassi JSX) gli elementi che React deve “renderizzare” nella pagina. Tu qui hai imposto una condizione con un if() che restituisce un paragrafo, quindi se quella condizione si verifica, tu vedrai solamente un paragrafo nella pagina. Non riuscirai quindi a “uscire” da quella situazione, in quanto non vedendo più gli altri elementi non potrai nemmeno inserire i dati, in breve non potrai fare più nulla.

    Come se non bastasse, il codice nelle graffe {} è sbagliatissimo su diversi fronti: dovrebbe contenere JSX per indicare gli elementi nel paragrafo, o il testo del paragrafo, o una espressione JavaScript racchiusa tra {} che restituisca come valore ciò che si dovrebbe visualizzare nel paragrafo delimitato da <p></p>, mentre qui stai inserendo del codice che imposta “direttamente” (ossia tramite le funzioni del DOM) l'HTML da visualizzare all'interno di un altro elemento.

    In pratica, al verificarsi del tuo if(), tu stai dicendo a React di renderizzare solo quel paragrafo (è il valore di ritorno della funzione) il cui contenuto è l'impostazione tramite DOM (che non si dovrebbe usare) del testo che sta all'interno di un altro elemento, o dello stesso elemento, recuperato dal DOM tramite l'ID.

    La domanda che dovrebbe sorgere è….. a che ti serve React se continui a mettere degli ID, a usare document.getElementById(), a impostare il testo con innerHTML, ecc.? Non senti che c'è qualcosa che stride?

    React ha il suo Virtual DOM. L'accesso al DOM lo fa esclusivamente React in base alle interfacce che gli dici di rappresentare usando i suoi elementi. Gli elementi li esprimi in “simil HTML” usando la sintassi JSX, ma non è HTML. Al DOM non devi accedere direttamente. L'obiettivo della tua funzione, come già detto, è quello di indicare tutti, tutti, tutti gli elementi che fanno parte dell'interfaccia e che devono essere rappresentati. Tendenzialmente, nella funzione del componente c'è codice per determinare i valori di interesse, ma un solo e unico return.

    Mi sa che le opzioni sono due: o non segui le guide e gli esempi disponibili online (da nessuna parte troverai un codice come il tuo), oppure le segui ma preferisci intuire (sbagliando) il funzionamento del framework in base però a un'esperienza che non hai sul mondo frontend, e quindi presupponendo meccanismi che non funzionano e non potrebbero mai funzionare.

    Qui non si tratta di correggere un bug, ma di formarsi correttamente e capire il funzionamento reale del framework.

    Leggi questo libro che per i neofiti spiega molto bene e passo per passo tutti i suddetti principi.

    Ciao!

  • Re: Caricamento pagine React

    Ti ringrazio tantissimo per il consiglio. Ho provato a mettere in campo tutto quello che ho letto sul tutorial che mi hai sempre indicato te. Come al solito faccio il passo più lungo della gamba. Peccato perchè anche se scritto cosi male sembrava funzionare. Pazienza :)

  • Re: Caricamento pagine React

    29/08/2023 - tonyven1 ha scritto:


    Peccato perchè anche se scritto cosi male sembrava funzionare.

    Non è una questione di forma o di rispetto delle convenzioni: è proprio un uso totalmente improprio.

    Il “sembrava” è esattamente dovuto a questo: sembra, ma non va, e non andrebbe comunque. :)

  • Re: Caricamento pagine React

    Ciao. Ho riscritto il codice sopra rileggendo il tutorial su React. Ho seguito il modo di scrivere JSX e come implementarlo. Purtroppo cosi com'è non mi funziona. Non riesco a capire anche se mi sembra di averlo scritto a dovere. A questo punto non so dove sbaglio. Premendo il bottone Valida dovrebbe visualizzare un messaggio a seconda dei casi. Dove sbaglio? (Devo ancora leggere il libro che mi è stato consigliato…portate pazienza!)

    import './App.css';
    import { useState } from 'react';
    
    
     
    export default function App(){
      const [nome, setNome]=useState('');
      const [cognome , setCognome]=useState('');
      const [telefono ,setTelefono]=useState('');
      const [mail , setMail]=useState('');
      
      function Nome(e){
        setNome(e.target.value);
      }
      
      function Cognome(e){
       setCognome(e.target.value);
      }
      
      function Telefono(e){
       setTelefono(e.target.value);
      }
      
      function Mail(e){
       setMail(e.target.value);
      }
    
    
      function Val(){
      let num= parseInt(telefono);
    
    if(nome ==='' && cognome==='' && telefono===''&& mail===''){
      return <p>Inserisci i dati</p>
       
    }else  if(nome ===''){
       return <p>Inserisci il nome</p>
        
    } else if (cognome ===''){
      return <p>Inserisci il cognome</p>
        
    } else if (telefono ==='' ){
      return <p>Inserisci il telefono </p>
      
       } else if(!isNaN (num) ){
        return <p>''</p>
         
    
    }else if(typeof telefono ==='string'  ){
      return <p>Il campo telefono deve essere numerico</p>
        
      
    
     }else if(mail ===''){
      return  <p>Inserisci  email</p>
     }
    }
    
      
    return(
      <>
      <h1 className="titolo">Pagina inserimento dati</h1>
    
    <table className="table">
      <tr>
        <td>
          <label className="et1" >Nome</label>
          </td>
          <td>
          <input type="text"  onChange={Nome} className="txt" id='nome' required></input>
          </td>
     </tr>
     <tr>
       <td>
          <label className="et1" >Cognome</label>
          </td>
          <td>
          <input type="text"  onChange={Cognome} className="txt" id='cognome' required></input>
          </td>
      </tr>
    
    <tr>     
      <td>
          <label className="et1" >Telefono</label>
          </td>
          <td>
          <input type="text"  onChange={Telefono} className="txt" id='telefono' required></input>
          </td>
     </tr>
     <tr>
     <td>
          <label className="et1" >Email</label>
          </td>
          <td>
          <input type="text"  onChange={Mail} className="txt" id='mail' ></input>
          </td>
          </tr>
          </table>
          <button className='btn' onClick={Val}>Valida</button>
         
      </>
     );
    }
    
  • Re: Caricamento pagine React

    01/09/2023 - tonyven1 ha scritto:


    Non riesco a capire anche se mi sembra di averlo scritto a dovere. […]

    Come fai a dirlo senza neanche un minimo dubbio?

    Senza entrare nei dettagli, pensa solo a questo: hai messo un pulsante “Valida” a cui hai assegnato una funzione da eseguire al click, che si chiama Val(), la quale contiene diversi if() che restituiscono come valore di ritorno un paragrafo, ciascuno con testi diversi.

    L'intenzione e il risultato che vuoi raggiungere io ce l'ho ben chiaro, perché è intuibile, ma non esiste possibilità che possa funzionare così come tu l'hai implementato.

    Ora domandati: nel momento in cui tu fai click su quel pulsante e la funzione viene eseguita, cosa ti aspetti che succeda?

    Immagino che ti aspetti che il paragrafo venga mostrato da qualche parte, giusto?

    Ecco, la domanda è: dove dovrebbe essere visualizzato? La libreria sul click chiama una funzione che restituisce un paragrafo: che se ne dovrebbe fare? Visualizzarlo? E dove? E al posto di che cosa? O dovrebbe aggiungerlo a quello che già c'è sulla pagina?

    Al netto di tutto, e senza neanche eseguire il codice che hai scritto, rileggendolo anche superficialmente non ti sembra che non abbia totalmente alcun senso, invece di darti l'impressione di “averlo scritto a dovere”?

    Se sì, poniti nei panni del framework e fai al suo posto quello che il suo codice gli dice di fare: pur senza fare supposizioni su quello che può accadere, non penso sia difficile intuire che ci sono molte cose che non vanno.

    Oltre a questo, scusami ma a ogni “tentativo” continuo a ripeterti le stesse cose, sottolineando quelle che sono fondamentali, ma ogni volta cambia tutto senza cambiare quello che “cozza” con i principi base di React che continuo a evidenziare.

    Mi spiace essere diretto, ma forse la programmazione frontend nello specifico (con o senza React) non è il tuo ambito migliore.

    A questo punto non so che altro dire. :|

  • Re: Caricamento pagine React

    Ciao ragazzi. Eccomi di nuovo qui. Dopo le batoste prese per aver provato di testa mia a scrivere del codice, mi sono messo a studiare di impegno sul bellissimo libro consigliato da Alka. Bellissimo libro ve lo consiglio. Come sempre mi sono imbattuto in un problema. Ho seguito passo passo il codice proposto e ora sono arrivato a un punto morto e avere qualche consiglio. Il codice che viene proposto nel testo dà errore:

    Uncaught Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: object. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.

    Ho controllato e ricontrollato il codice ma continua a non funzionare. Che si fà in questi casi? Ci si rivolge all'autore del libro o cosa?

    Nel frattempo posto il codice “incriminato”:

    import Main from "./components/Main";
    import Sidebar from "./components/Sidebar";
    
    const user = {
      id: 1,
      name: "Alessandro",
      image: "https://github.com/lifeisfoo.png"
    };
    
    export default function App() {
      return (
        <div className="container-fluid">
          <div className="row">
            <Sidebar user={user} />
            <Main />
          </div>
        </div>
      );
    }

    Ovviamente questo è parte del codice che viene usato ma non mi sembra il caso di postare tutto il codice lavorato fin'ora. Sono 7 file. Comunque la console del browser mi riporta sempre l'errore nel render di questo file.

Devi accedere o registrarti per scrivere nel forum
30 risposte