2016-07-27 11 views
6

Używam redux-saga. W kodzie yield* ReduxSaga.takeEvery('MY_ACTION', updatePorts); jak uzyskać dostęp do action, aby uzyskać jego pola.Jak uzyskać action.params z saga

Na przykład mam twórca Działanie:

function status(){ 
    type: 'MY_ACTION', 
    status: true 
} 

Jak mogę uzyskać dostęp action.status z mojego sagi? Czy muszę uzyskać dostęp do danych tylko za pośrednictwem getState() i select?

Odpowiedz

2
const actionCreator =() => ({ 
    type: 'MY_ACTION', 
    status: true 
}) 

function* updatePorts() { 
    while (true) { 
     const { status } = take('MY_ACTION'); 
     // ... 
    } 

} 

Można też zrobić coś takiego. Dokumenty redux-saga mają ładne wyjaśnienie na temat zalet:

Używanie take ma subtelny wpływ na to, jak piszemy nasz kod. W przypadku takeEvery wywołane zadania nie mają kontroli nad tym, kiedy zostaną wywołane. Będą one wywoływane raz po raz w każdej akcji dopasowującej. Nie mają również kontroli, kiedy zatrzymać obserwację.

W przypadku przejmowania sterowanie jest odwrócone. Zamiast zadań, które są przekazywane do zadań obsługi, Saga sama wykonuje akcję przez . Wygląda na to, że Saga wykonuje normalne wywołanie funkcji action = getNextAction(), która rozwiąże się, gdy zostanie wykonana akcja .

czytaj więcej tutaj: https://redux-saga.js.org/docs/advanced/FutureActions.html