Redux sarà azioni di dispacciamento per cambio di stato. Quali sono le convenzioni di denominazione dei tipi di azione in redux?Denominazione convenzione di eventi in redux js
risposta
Ci sono alcune convenzioni in tutto la comunità, ti elenco quelli che conosco di e pensare sono utili qui:
La convenzione più comune è quello mantenere i tipi di azione ("tipi di eventi ") in
CONSTANT_CASE
.Ciò evita errori di ortografia, dove l'azione ha un tipo di
my_type
, ma il riduttore si aspetta un tipo dimy-type
oMy_Type
.Un'altra convenzione molto comune è quello di salvare i tipi di azione in un file separato come costanti, per esempio
var MY_ACTION_TYPE = 'MY_ACTION_TYPE';
e usarli da lì.Questo evita anche errori di ortografia, quindi non ti aspetti che un'azione abbia un tipo di
MY_ACTION_TYP
. Se la variabile non esiste, riceverai immediatamente un errore, specialmente se stai leccando.A non è così comune, ma imho molto utile, convenzione è quello di ambito le azioni ad un progetto e un dominio. Questo approccio è stato reso popolare da Erik Rasmussen nel suo "Ducks" proposal, che specifica che i tipi di azione devono essere in questa forma:
var MY_ACTION_TYPE = 'appname/domain/MY_ACTIONTYPE'
.Ciò evita il caso di due costanti di azioni aventi lo stesso valore. Per esempio. immagina di avere un'area di amministrazione e un'area di visualizzazione utente, ed entrambi hanno moduli che inviano un tipo di azione
'CHANGE_USERNAME'
. Questo farà sì che due riduttori raccolgano la stessa azione, in cui uno non dovrebbe sollevare l'altro. Questo può accadere in caso di incidente ed è molto fastidioso rintracciare. Aggiungendo il prefisso all'app e al nome di dominio, si evita questo problema:'appname/admin/CHANGE_USERNAME'
è diverso da'appname/user/CHANGE_USERNAME'
!
Ecco tutte le convenzioni che conosco e utilizzo, ma sono sicuro che qualcun altro ha più - quello che hai utilizzato e trovato utile nei vostri progetti?
Esistono anche alcune convenzioni relative alla denominazione dei tipi di azione asincrona. Se si dispone di un insieme di azioni per rappresentare una chiamata API per ottenere un utente, è possibile dividere in qualcosa di simile:
FETCH_USER_REQUEST
- per quando si invia prima la chiamata APIFETCH_USER_SUCCESS
- per quando il chiamata API è fatto e con successo ha restituito datiFETCH_USER_FAIL
- per quando la chiamata API non è riuscita e ha risposto con un errore,FETCH_USER_COMPLETE
- a volte utilizzati alla fine della chiamata, indipendentemente dallo stato
C'è un nuovo modello che risolve questo problema, redux-auto.
Prende le idee della composizione del riduttore un passo avanti. Dove invece di avere un file che rappresenta il tuo riduttore e che crea funzioni di azioni individuali. approcci di
redux-auto di avere cartelle con i singoli file JS che rappresentano ogni azione/trasformazione dello stato e dinamicamente esporre questo come funzioni
esempio
└── store/
├──user/
│ └── index.js
│ └── changeName.js
└──posts/
└── index.js
└── delete.js
Ora dal comunque nella vostra applicazione è possibile scrivere
import actions from 'redux-auto'
...
actions.user.changeName({name:"bob"})
negozio/utente/changeName.js
export default function (user, payload) {
return Object.assign({},user,{ name : payload.name });
}
Questo è!
Se si desidera ascoltare le azioni di riduzione nei riduttori di terze parti. È possibile utilizzare come controllo di qualità allentato rispetto alla funzione.
action.type == actions.user.changeName // "USER/CHANGENAME"
Per qualcosa di più avanzato si può anche vedere se l'azione è di proprietà di un riduttore specifica
// Returns true if it's an action specifically for user
if(action.type in actions.user)
Si può leggere di più sul project page
- 1. Eventi - convenzione di denominazione e stile
- 2. Convenzione di denominazione per le risorse (immagini, css, js)?
- 3. iPhone ivar convenzione di denominazione
- 4. Convenzione di denominazione Python - namedtuples
- 5. Convenzione di denominazione classe Perl
- 6. SqlServer identità convenzione di denominazione
- 7. Convenzione di denominazione Microsoft VB.NET
- 8. Convenzione di denominazione per modelli comuni?
- 9. Convenzione di denominazione ID in ASP.NET?
- 10. Convenzione di denominazione per oggetti in java
- 11. MongoDB convenzione schema di disegno di denominazione
- 12. Convenzione di denominazione dei tratti PHP?
- 13. Convenzione di denominazione delle campi privati
- 14. Convenzione di denominazione per le costanti Scala?
- 15. Play Framework - Convenzione di denominazione CRUD
- 16. Convenzione di denominazione per moduli/cartelle Rails
- 17. API Web Convenzione di denominazione richiesta HTTP
- 18. Come funziona la convenzione di denominazione cakePHP?
- 19. moduli Python convenzione gerarchia di denominazione
- 20. Convenzione di denominazione per CFBundleSignature e CFBundleIdentifier
- 21. Convenzione di denominazione per le viste Django?
- 22. convenzione di denominazione dei task grunt personalizzati
- 23. Convenzione di denominazione per il vincolo univoco
- 24. Convenzione di denominazione della classe estesa ottimale?
- 25. Convenzione di denominazione delle getter asincrono
- 26. metodo Objective C convenzione di denominazione
- 27. Campi data del database - Convenzione di denominazione
- 28. convenzione di denominazione delle classi astratta
- 29. Variabile costante Java, convenzione di denominazione
- 30. Convenzione di denominazione Scala per le opzioni
Vorrei notare che i tipi di azione di scoping per riduttore rafforza l'idea ** errata ** che [azioni mappa 1: 1 a riduttori specifici] (https://github.com/reduxible/reduxible/issues/8). In realtà, una singola azione può (e spesso dovrebbe) essere elaborata da diversi riduttori e viceversa. –
Questo è corretto, mentre ciò non impedisce a uno di prendere un'azione in diversi riduttori, potrebbe sembrare così. Penserò a come modificare la risposta per riflettere, o forse hai un'idea? EDIT: aggiorna la risposta – mxstbr
Lo cambierei da 'app/reducername/ACTION_TYPE' a qualcosa come' app/modulename/ACTION_TYPE' o 'app/domain/ACTION_TYPE' per chiarire i riduttori ei creatori di azioni potrebbero appartenere a un singolo gruppo ma le azioni non appartengono a particolari riduttori. –