Domanda di progettazione React / GraphQL / Redux: cercare una buona pratica

1

Un sito web di React che sto costruendo avrà queste sezioni: Hero , Projects , Courses , Skills e poche altre. La sezione Skill eseguirà l'iterazione attraverso un elenco di abilità e visualizzerà un componente React SkillCard per ciascun elemento (come puoi vedere nello schizzo). SkillCard aprirà un componente SkillDetail quando si fa clic. Il SkillDetail appare come un modale e visualizza i dati di Projects e Courses ad esso associati. Anche le sezioni Project e Courses , nella loro sezione, stampano un elenco e quando si fa clic apriranno un componente ProjectDetail o CourseDetail . Quindi è tutto collegato dinamicamente. Il progetto e la sezione dei corsi hanno ciascuno uno schizzo simile come sotto.

Penso che GraphQL potrebbe essere una scelta meravigliosa per questo. La domanda principale è: ho bisogno di Redux?

Quindi, prima di poter rispondere a questa domanda, è pertinente che io capisca come impostare il mio progetto. Quindi ecco uno schizzo che ho fatto che può aiutarti a vedere. Concentriamoci solo sulla sezione Abilità.

TheReactModalèladomanda.Mipiacerebbechesaltassefuorioccupandocircail70%delloschermoesfocarelosfondoperunbell'effetto.QuindipensocheidettaglidelleabilitàdovrebberoesserecaricatidalcomponenteSkill.

LaSkillCardpotrebbeaverequesteinformazioni:

Skill{idnameaboutstars}

IlcomponenteSkillDetailpotrebbecontenerequesteinformazioni:

SkillDetail(id:String){skillNameProject{idnameurl}Course{idnameurl}}

Questaèsoloun'appasingolapaginaementrescorriversoilbassovedraiHero,Abilità,Progetti,Corsiealtresezioni.

PrimadiGraphQL,pensereichel'interaappsiauncontenitorechehainviato3+richiesteperottenereelenchidi:competenze,progetti,corsiealtro.QuestoèciòchefareiconReduxequestiriduttoripossonomemorizzarenellacachelarisposta(finoalcaricamentodellapagina).OramichiedosehopersinobisognodiRedux.

Pensodidoverprimacapiredovesonoicontenitori...

Modules--/Componentsapp.js(maincontainer)----/SkillsSkill.js(listofCards)SkillDetail.js(modalpopup)----/Projects(listofCards)ProjectDetail.js(modalpopup)----/CoursesCourses.js(listofCards)CourseDetail.js(modalpopup)
  • QualcheideasuseusaresoloGraphQLhasenso?
  • Devousareredux?
  • Pensicheognicomponente*Detail.jsdovrebbeessereilsuocontenitoreGraphQL?

modifica:quiApp.jsgraphqlconnect

exportdefaultcompose(graphql(queries.getSkillList(),{name:"skills"
  }),
  graphql(queries.getProjectList(), {
    name: "projects"
  }),
  graphql(queries.getCourseList(), {
    name: "courses"
  }),
)(App);

Tecnicamente, queste 3 query di root hanno TUTTE le informazioni necessarie ai componenti di dettaglio, ma hanno solo bisogno di essere ordinate. C'è bisogno di più richieste al server? GraphQL utilizza questi dati invece di richiedere endpoint specifici dal server?

Sto davvero cercando di farlo nel modo giusto e sono aperto a qualsiasi feedback. Grazie.

    
posta Michael Bruce 22.06.2017 - 18:12
fonte

2 risposte

1

Proprio sulla prima pagina del sito Web di Redux c'è un collegamento a un articolo che dice: You Potrebbe non essere necessario ridire . Vale la pena leggerlo poiché spiega molto chiaramente cosa si ottiene usando Redux e ciò che si perde usando Redux. Penso che sia un articolo molto giusto, e per il sito Web di Redux averlo in prima pagina, la squadra di Redux deve essere d'accordo.

Se lo stato dell'applicazione viene gestito veramente dal lato del servizio Web, quando l'applicazione viene ricaricata dopo una modifica, recupera automaticamente lo stato. Il risultato netto è che uno dei maggiori vantaggi pratici di Redux diventa ridondante.

Detto questo, GraphQL può farti popolare lo schermo con esattamente gli elementi di dati di cui ha bisogno. Ha il potenziale per cambiare drasticamente il modo in cui progetta la tua applicazione. Ci sono buone probabilità che tu non abbia ancora scoperto il potenziale per te. C'è un po 'di una curva di apprendimento.

Ora, se memorizzi uno stato localmente , Redux inizia ad avere di nuovo dei vantaggi. Ogni volta che il JavaScript si ricarica, hai il potenziale per perdere il tuo stato locale. Redux fornisce i meccanismi per prevenire la perdita locale dei dati in modo che tu possa continuare a inseguire quel bug un passo alla volta.

La risposta diventa dipende da alcuni fattori.

    
risposta data 20.11.2017 - 15:55
fonte
0

Probabilmente avrai bisogno di un redux, sì. Redux può gestire le possibili azioni e lo stato dell'app, mentre graphql è solo per il recupero dei dati. Redux ad esempio manterrà traccia delle competenze selezionate separando lo stato delle app dai componenti e rendendo i componenti di comunicazione molto più semplici.

    
risposta data 22.06.2017 - 19:33
fonte

Leggi altre domande sui tag