web-dev-qa-db-fra.com

Puis-je envoyer plusieurs actions sans middleware Redux Thunk?

J'ai lu que Redux Thunk est le moyen fiable de gérer les actions/requêtes asynchrones. Il n'y a pas grand chose à propos de la répartition des actions par d'autres actions.

Pourquoi ne pas envoyer des actions synchrones? Je ne suis pas sûr des problèmes de performances de l'approche thunk, mais puis-je simplement répartir une action dans un autre créateur d'action sans définir de fonction à l'intérieur? 

Il me semble que l’utilisation de redux thunk n’est pas nécessaire pour répondre à ce besoin.

19
Rafał Łyczkowski

C'est une erreur de penser que les actions visant à énoncer les changements sont individuelles. Ils sont en fait plusieurs-à-plusieurs. Rappelez-vous que toutes les actions sont appelées sur tous les réducteurs.

Par exemple, une seule action peut déclencher plusieurs changements d'état:

function firstReducer(state, action) {
    switch (action.type) {
        case ACTION_X:
            // handle action x
    }
}

function secondReducer(state, action) {
    switch (action.type) {
        case ACTION_X:
            // handle action x
    }
}

function thirdReducer(state, action) {
    switch (action.type) {
        case ACTION_X:
            // handle action x
    }
}

Inversement, le même changement d'état peut résulter de deux actions différentes.

function firstReducer(state, action) {
    switch (action.type) {
        case ACTION_X:
        case ACTION_Y:
            // handle action x and y in the same manner
    }
}

Il peut sembler étrange de gérer deux actions de la même manière, mais cela ne concerne que le contexte d'un seul réducteur. Les autres réducteurs sont libres de les traiter différemment.

function secondReducer(state, action) {
    switch (action.type) {
        case ACTION_X:
            // handle action x
        case ACTION_Y:
            // handle action y
    }
}

function thirdReducer(state, action) {
    switch (action.type) {
        case ACTION_X:
            // handle action x
        default:
            // ignore action y
    }
}

Avec cette relation plusieurs à plusieurs, il est tout simplement inutile de hiérarchiser les actions. Si plusieurs créateurs d’action déclenchent plusieurs actions synchrones, votre code devient plus complexe et plus difficile à raisonner.

15
David L. Walsh

Si ceci réussit, alors oui, en utilisant:

store.dispatch(action1, action2)

Peut-être +1 au github?

1
Robert Plummer