2016-11-30 1 views
0

Gibt es eine Best Practice/empfohlene Methode, um zu bestätigen, dass eine Redux-Aktion wohlgeformt ist? Ich bin ein ziemlich noobish JavaScript-Programmierer (kommt aus 20 Jahren C++/Java/C#) und durch den Mangel an starker Typisierung abgeworfen.Redux.js: Fehlerhafte Aktionen erfassen?

Insbesondere die Verwendung Fall, dass ich zu Adresse versuchen ist:

1.using das Reagieren + Redux "ToDo" app (http://redux.js.org/docs/basics/ExampleTodoList.html)

2.Using Aktion Schöpfer:

export function toggleTodo(index) { 
    return { type: TOGGLE_TODO, index } 
} 

3.with reducer code schnipsel:

case TOGGLE_TODO: 
    if (state.id !== action.id) { 
    return state 
    } 

Beachten Sie, dass Index und ID nicht übereinstimmen. Sie sollten jedoch - es war ein Fehler. Ich brauchte 30 Minuten, um zu diagnostizieren, und ich kann mir nur für größere Apps vorstellen.

+1

Ich habe ein GitHub Repo mit einer Redux-Action-Validator-Basisklasse erstellt. Die README hat mehr Informationen über die Implementierung: https://github.com/michael-martin-al/redux-action-validator –

+0

Das ist ziemlich cool! – Malachi

Antwort

1

Haben Sie eine Klasse angesehen zu schaffen, die einen Aktionstyp darstellt, und lassen sie dann die Validierung handhaben, wie so ...

class ToggleAction { 
    constructor(o) { 
    if (
     typeof o === 'object' && 
     typeof o.type === 'string' && 
     typeof o.id === 'number' 
    ) { 
     this.type = "TOGGLE_TODO"; 
     this.id = o.id 
    } else { 
     throw new Error('Invalid ToggleAction'); 
    } 
    } 

    toObject() { 
    return { type: this.type, id: this.id }; 
    } 
} 

Und dann könnte man es so in dem Aktions Schöpfer verwenden ..

.
export function toggleTodo(index) { 
    return new ToggleAction({ id: index }).toObject(); 
} 

Und wie dies in den Druckminderer ...

case TOGGLE_TODO: 
    const toggleAction = new ToggleAction(action) 
    if (state.id !== toggleAction.id) { 
    return state 
    } 

Wenn all das funktioniert aus, könnten Sie eine ActionFactory erstellen, die ActionType-Klassen generiert.

EDIT: Ich habe ein npm moduleredux-action-validator mit einer Readme genannt beschreibt, wie es zu installieren und zu verwenden.