C'è un modo per annullare un'azione o ignorarla?Come annullare/ignorare un'azione in redusso
O meglio, qual è il modo migliore/consigliato per ignorare un'azione?
Ho la seguente creatore azione e quando ho ingresso una dimensione non valida (diciamo 'some_string'
) nel creatore di azione, oltre a ottenere il mio messaggio di avviso Ho anche: Uncaught Error: Actions must be plain objects. Use custom middleware for async actions.
import { SET_SELECTED_PHOTOS_SIZE } from './_reducers';
export default (size=0) => {
if (!isNaN(parseFloat(size))) {
return {
type: SET_SELECTED_PHOTOS_SIZE,
size: size,
};
} else {
app.warn('Size is not defined or not a number');
}
};
ho discusso nel redux
-channel in Discord (reactiflux) dove uno stato suggerito di usare redux-thunk simili:
export default size => dispatch => {
if (!isNaN(parseFloat(size))) {
dispatch({
type: SET_SELECTED_PHOTOS_SIZE,
size: size,
});
} else {
app.warn('Size is not defined or not a number');
}
}
l'altra opzione era di ignorare l'azione all'interno del riduttore . Questo rende il riduttore "più grasso" perché ha quindi più responsabilità, ma utilizza meno azioni thunk che rende più facile il debug. Potevo vedere il modello di thunk sfuggire di mano dato che sarei stato costretto a usarlo per quasi ogni azione, rendendo le azioni in batch un po 'difficili da mantenere se ne hai molte.
Per quanto riguarda l'aspetto di ricarica a caldo, se si ripetono le azioni così come vengono ricevute dal riduttore, allora si dovrebbe finire con lo stesso stato in entrambi i casi, e se altre azioni vengono attivate nel creatore, la riproduzione di quelle dovrebbe comunque risultare nel stesso stato, supponendo che il riduttore sia puro – Moshe
Questo è vero, ma come ho spiegato nell'esempio sopra. Nel primo approccio (usando thunk-middleware) l'azione non viene nemmeno inviata e quindi l'informazione viene persa e l'informazione è che l'utente ha fatto clic sul pulsante. Questo è un esempio banale ma nel mondo reale si potrebbe finire con una logica molto pesante nei creatori di azioni che si traduce in molte Azioni (Eventi) ma la logica per generare le azioni non è comunque riproducibile. Tuttavia, non è possibile negare l'interazione con l'interfaccia utente (facendo clic sul pulsante). –
Per ignorare le azioni in redux, dovresti dare un'occhiata a [redux-ignore] (https://github.com/omnidan/redux-ignore). È stato raccomandato da Dam Abramov stesso. – umphy