2017-12-15 3 views
0

Redux Reducer sollte ohne Nebenwirkungen sein. Was aber, wenn eine Aktion den Download einer Datei im Browser auslöst, deren Inhalt vom Zustand des Geschäfts abhängt? Sicher sollte das als Nebeneffekt gelten? Wäre etwas wie das Folgende in Ordnung oder sollte ich nach alternativen Methoden suchen?Nebenwirkungen in Redux Reducer

case 'SAVE_GRID': { 
    const { json } = state 
    fileDownload(json, 'data.json', 'application/json') 
    return state 
} 

Antwort

1

Es sei denn, Sie sehr komplexe Zustandsübergänge haben, die tatsächliche fileDownload in einem Action-Schöpfer geschehen soll, nicht in der Reduzierer. Der Reduzierer sollte für das Zusammenführen/Reduzieren des Zustands verantwortlich sein und das ist alles.

Aktion:

export const saveGrid = (json) => { 
    return (dispatch) => { 
     fileDownload(json, 'data.json', 'application/json') 
      .then(() => { 
       dispatch({ type: 'SAVE_GRID', json }); 
      }); 
    } 
} 

Minderer:

case 'SAVE_GRID': { 
    return { 
     ...state, 
     json: action.json 
    } 
}