What are the differences between call() and put() in redux-saga?
Both call()
and put()
are effect creator functions. call()
function is used to create effect description, which instructs middleware to call the promise. put()
function creates an effect, which instructs middleware to dispatch an action to the store.
call()
is a blocking effect, which means that the saga will wait for promise resolving before moving on to the next step.
put()
, on the other hand, is a non-blocking effect, which means that the saga can continue to the next step and action will be dispatched within internal scheduler.
Let's take example of how these effects work for fetching particular user data.
function* mySaga() {// Dispatch an action to the store using put()yield put({ type: "MY_ACTION" });// Call a function and wait for the result using call()const result = yield call(myFunction, "some argument");// Dispatch another action to the store using put()yield put({ type: "ANOTHER_ACTION", payload: result });}
In this example, the saga first dispatches MY_ACTION
to the store using put()
, and then calls the myFunction
function and waits for the result using call()
. Finally, it dispatches ANOTHER_ACTION
to the store, passing the result of myFunction
as the payload.
Read more
November 06, 2022
ReactJSNovember 06, 2022
ReactJS