2017-04-11 2 views
0

jungs.Async-Aktionsersteller sendet keine Aktion wie erwartet

Ich habe den folgenden asynchronen Aktionsersteller, der einen anderen Aktionsersteller auslöst oder je nach aktuellem Status null zurückgibt. Das Problem ist, dass es immer null egal was der aktuelle Zustand ist zurückgibt.

// actions.js 

export const loadPosts = category => (dispatch, getState) => { 
    const currentState = getState() 
    const posts = currentState.postsByCategory 
    const categoryPosts = posts[category] 
    const items = categoryPosts.items 

    if(items === []) { 
    return dispatch(fetchPosts(category)) 
    } 

    return null 
} 

Wie Sie die Aktion Schöpfer auf den Wert sehen können, hängt fetchPosts() Dispatching von items gleich ein leeres Array ist. Ich teste es es einen anfänglichen Zustand mit der folgenden Struktur bereitgestellt:

// initialState 
const initialState = { 
    postsByCategory: { 
    hot: { 
     isFetching: false, 
     items: [] 
    } 
    } 
} 

Ich bin offensichtlich nicht die items Eigenschaft angemessen Zugriff, aber ich kann nicht sehen, wo der Fehler in meinem Code. Ich teste dies mit Redux-Mock-Store, Erstellen einer Instanz eines MockStore und Bereitstellung von initialState. Hoffe ihr könnt den Fehler in meinem Code genau lokalisieren. Vielen Dank im Voraus.

Antwort

3

Ihr Problem liegt in der comparison

if(items === []) 

In dem obigen Code, Einzelteile werden nicht ===-[] sein, da sie beide von verschiedenen Instanzen sind. Wenn Sie überprüfen möchten, ob items leer ist, verwenden Sie bitte items.length === 0. Ich hoffe, das hilft.

+0

Hey Mann, es hat funktioniert. Vielen Dank! Ich verstehe einfach nicht den Unterschied zwischen === [] und .length === 0. Hat es etwas mit Array-Metadaten zu tun? Haben Sie Vorschläge für weitere Lektüre, um das besser zu verstehen? –