React con server

di il
5 risposte

React con server

Ciao a tutti. Sono arrivato quasi  alla fine del libro consigliato su questo forum. In particolare il capitolo che sto leggendo parla di comunicare con le API. Quindi dice di avviare il server usato per l'applicazione del libro con : npx example-todo-api. A questo punto dice di usare un client come curl o postman per fare le richieste al server con i vari metodi get , post e altri. Ora ho provato a lanciare il server e funziona, ma poi ? Come faccio a far girare l'applicazione? Oppure come si procede successivamente? Devo installare curl per esempio? Mi sono impantanato e non so come proseguire.

5 Risposte

  • Re: React con server

    09/10/2023 - tonyven1 ha scritto:


    Come faccio a far girare l'applicazione?

    Quale applicazione? Parliamo del server, o del client?

    09/10/2023 - tonyven1 ha scritto:


    Oppure come si procede successivamente?

    Devi inviare le richieste via JavaScript al tuo server dall'applicazione React, ad esempio tramite Fetch API.

    09/10/2023 - tonyven1 ha scritto:


    Devo installare curl per esempio?

    Questo serve per mandare chiamate all'API e testarla. Oltre a cURL, si può usare qualche strumento più visuale e semplice, come Postman oppure Insomnia.

    09/10/2023 - tonyven1 ha scritto:


    Mi sono impantanato e non so come proseguire.

    Capisco, però parliamo di un tema parecchio ampio da affrontare su un forum. :|

  • Re: React con server

    Ciao. Ho installato postman e provato i vari metodi GET POST e altri. Quello che non riesco a capire è come lanciare l'applicazione principale lato client. Mi spiego. Con visualstudio lancio il server npx-example-todo-api e va in esecuzione. Ma come faccio a lanciare l'applicazione principale scritta in react sempre da visual studio? Generalmente mi metto da terminale nella directory dell'applicazione e lancio npm start. Ma come faccio da terminale se è in esecuzione il server? Spero di essermi spiegato. 

  • Re: React con server

    11/10/2023 - tonyven1 ha scritto:


    Generalmente mi metto da terminale nella directory dell'applicazione e lancio npm start. Ma come faccio da terminale se è in esecuzione il server?

    Apri un altro terminale separato.

  • Re: React con server

    Ciao. Ho aperto due terminali su visualstudio. Su uno ho avviato il server e sull'altro rimanendo nella stessa directory ho lanciato npm start per avviare l'applicazione. Perchè mi dà questo errore?:

    Html Webpack Plugin:
      Error: Child compilation failed:
      [eslint] Cannot read config file: F:\PROGRAMMAZIONE\JAVASCRIPT\nodejs\libro_apogeo\react-guida-pratica-master\ch10\nod  e_modules\eslint-config-react-app\base.js
      Error: Unexpected token 'export'
      Referenced from: BaseConfig
      
      - child-compiler.js:169 
        [ch10]/[html-webpack-plugin]/lib/child-compiler.js:169:18
      
      - Compiler.js:551 finalCallback
        [ch10]/[webpack]/lib/Compiler.js:551:5
      
      - Compiler.js:577 
        [ch10]/[webpack]/lib/Compiler.js:577:11
      
      - Compiler.js:1200 
        [ch10]/[webpack]/lib/Compiler.js:1200:17
      
      
      - Hook.js:18 Hook.CALL_ASYNC_DELEGATE [as _callAsync]
        [ch10]/[tapable]/lib/Hook.js:18:14
      
      - Compiler.js:1196 
        [ch10]/[webpack]/lib/Compiler.js:1196:33
      
      - Compilation.js:2795 finalCallback
        [ch10]/[webpack]/lib/Compilation.js:2795:11
      
      - Compilation.js:3100 
        [ch10]/[webpack]/lib/Compilation.js:3100:11
    

    Posto il codice dell'applicazione. Questo è solo il file principale dell'applicazione. Ce ne sono altri ma questo è quello che viene lanciato

    import { useEffect, useState } from "react";
    import Layout, { LeftCol, RightCol } from "./components/Layout";
    import ListNames from "./components/ListNames";
    import User from "./components/User";
    import { NoListView } from "./components/NoListView";
    import ListView from "./components/ListView";
    import { NewListButton } from "./components/NewListButton";
    import { deleteData, getData, patchData, postData } from "./utils";
    import ReactModal from "react-modal";
    import ErrorModal from "./components/ErrorModal";
    
    export default function App() {
      const [user, setUser] = useState({});
      const [lists, setLists] = useState([]);
      const [listIdx, setListIdx] = useState(-1);
      const [todos, setTodos] = useState([]);
      const [error, setError] = useState(false);
    
      useEffect(() => {
        getData("/api/user").then((retUser) => setUser(retUser));
        getData("/api/lists").then((retLists) => setLists(retLists));
      }, []);
    
      const selectListByIdx = (idx) => {
        setListIdx(idx);
        const listId = lists[idx].id;
        getData(`/api/todos?listId=${listId}`).then((retTodos) => {
          setTodos(retTodos);
        });
      };
    
      const addToListCount = (listIdx, num) => {
        const tmpLists = [...lists];
        tmpLists[listIdx] = { ...tmpLists[listIdx] };
        tmpLists[listIdx].undone_count += num;
        setLists(tmpLists);
      };
    
      const handleCreateTodo = (text) => {
        const listId = lists[listIdx].id;
        postData(`/api/todos`, { listId, text, done: false })
          .then((newTodo) => {
            setTodos([newTodo, ...todos]);
            addToListCount(listIdx, 1);
          })
          .catch((e) =>
            setError(`Errore durante la creazione dell'attività: ${e.status}`)
          );
      };
    
      const handleUpdateTodo = (id, data) => {
        const todoIdx = todos.findIndex((t) => t.id === id);
        const preTodo = todos[todoIdx];
        patchData(`/api/todos/${id}`, data).then((patchedTodo) => {
          const tmpTodos = [...todos];
          tmpTodos[todoIdx] = patchedTodo;
          setTodos(tmpTodos.filter((t) => t.listId === patchedTodo.listId));
    
          const isTodoStatusChanged = preTodo.done !== patchedTodo.done;
          if (isTodoStatusChanged) {
            const listIdx = lists.findIndex((l) => l.id === patchedTodo.listId);
            addToListCount(listIdx, preTodo.done ? 1 : -1);
          }
        });
      };
    
      const handleDeleteTodo = (id) => {
        deleteData(`/api/todos/${id}`).then((deletedTodo) => {
          const todoIdx = todos.findIndex((t) => t.id === id);
          const todo = todos[todoIdx];
    
          const tmpTodos = [...todos];
          tmpTodos.splice(todoIdx, 1);
          setTodos(tmpTodos);
    
          addToListCount(listIdx, todo.done ? 0 : -1);
        });
      };
    
      const handleCreateList = () => {
        postData("/api/lists", { name: "Nuovo elenco" }).then((newList) => {
          setLists([...lists, newList]);
          setListIdx(lists.length);
          setTodos([]);
        });
      };
    
      const handleDeleteList = (id) => {
        deleteData(`/api/lists/${id}`).then((deletedList) => {
          const listIdx = lists.findIndex((l) => l.id === id);
    
          const tmpLists = [...lists];
          tmpLists.splice(listIdx, 1);
          setLists(tmpLists);
    
          setListIdx(-1);
        });
      };
    
      const handleUpdateListName = (id, name) => {
        patchData(`/api/lists/${id}`, { name }).then((patchedList) => {
          const listIdx = lists.findIndex((l) => l.id === id);
          const tmpLists = [...lists];
          tmpLists[listIdx] = patchedList;
          setLists(tmpLists);
        });
      };
    
        
      return (
        <>
          <ReactModal isOpen={Boolean(error)}>
            <ErrorModal message={error} onConfirm={() => setError(false)} />
          </ReactModal>
          <Layout>
            <LeftCol>
              <User name={user.name} image={user.image}>
                <NewListButton onCreateList={handleCreateList} />
              </User>
              <hr />
              <ListNames
                lists={lists}
                selectedListIdx={listIdx}
                onListClick={selectListByIdx}
              />
            </LeftCol>
            <RightCol>
              {listIdx === -1 ? (
                <NoListView />
              ) : (
                <ListView
                  list={lists[listIdx]}
                  todos={todos}
                  onTodoCreate={handleCreateTodo}
                  onTodoDelete={handleDeleteTodo}
                  onTodoUpdate={handleUpdateTodo}
                  onListDelete={handleDeleteList}
                  onListNameUpdate={handleUpdateListName}
                />
              )}
            </RightCol>
          </Layout>
        </>
      );
    }
    
  • Re: React con server

    12/10/2023 - tonyven1 ha scritto:


    Su uno ho avviato il server e sull'altro rimanendo nella stessa directory ho lanciato npm start per avviare l'applicazione. Perchè mi dà questo errore?

    Non ho idea di come il progetto sia stato creato, configurato e realizzato, al netto del codice sorgente del componente principale dell'app.

    Anche il percorso mi pare molto lungo, e c'è pure uno spazio in mezzo nel percorso ("nod e_modules" dovrebbe essere “node_modules”), quindi o hai sbagliato a incollare, o hai fatto qualche “danno” nella cartella dei sorgenti rinominando accidentalmente qualche folder.

    In entrambi i casi, c'è un intervento manuale che sicuramente impedisce l'avvio del progetto e occorre rivedere tutto, ma non potendo verificare in diretta non ho altri elementi per essere più preciso.

Devi accedere o registrarti per scrivere nel forum
5 risposte