Javascript 如何在任何分派操作上运行redux saga中间件?

Javascript 如何在任何分派操作上运行redux saga中间件?,javascript,reactjs,redux,react-redux,redux-saga,Javascript,Reactjs,Redux,React Redux,Redux Saga,我在“usersaga.js”中定义了以下redux saga中间件函数 import {call, put, takeEvery, takeLatest} from "redux-saga/effects"; import {REQUEST_API_DATA, receiveApiData} from '../store/actions'; import userServiceObject from '../services/user.service'; // Worker Saga f

我在“usersaga.js”中定义了以下redux saga中间件函数

import {call, put, takeEvery, takeLatest} from "redux-saga/effects";
import {REQUEST_API_DATA, receiveApiData} from '../store/actions';

import userServiceObject from '../services/user.service';


// Worker Saga function will be fired on USER_FETCH_ACTIONS

export function* getApiData(action){
    console.log(action)
    try{
        // Do Api Call
        const data = yield call(userServiceObject.getUsers);
        console.log(data.data);
        yield put(receiveApiData(data.data));
    }
    catch(error){
        console.log("this is error part and executing");
        console.log(error);
    }
}

在'index.js'文件中,我使用“run”方法在函数getApiData上运行

import React from 'react';
import ReactDOM from 'react-dom';
import {createStore, combineReducers, applyMiddleware } from 'redux';
import {Provider} from 'react-redux';
import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker';

import contactReducer from './store/reducers/userlist';

// For Creating Saga and connecting store to saga middleware
import createSagaMiddleware from 'redux-saga';
import {getApiData} from './sagas/usersaga';

const sagaMiddleware = createSagaMiddleware();

const rootReducer = combineReducers({
    res: contactReducer
})

const store = createStore(rootReducer, applyMiddleware(sagaMiddleware));

sagaMiddleware.run(getApiData);

ReactDOM.render(<Provider store={store}> <App /> </Provider>, document.getElementById('root'));



serviceWorker.unregister();

您需要使用实际上已经在usersaga.js中导入的
takeEvery
效果

因此,在usersaga.js中添加以下内容:

export function* requestWatcher(action){
    yield takeEvery('REQUEST_API_DATA', getApiData);
}
在index.js中运行这个故事,而不是直接运行
getApiData

sagaMiddleware.run(requestWatcher);

这是redux saga的基本概念之一,我真的建议阅读文档

非常感谢,它可以工作,但是如果我需要在“DELETE\u API\u DATA”操作上执行另一个函数“deleteApiData”。我是否可以在usersaga.js中声明函数deleteApiData并在requestWatcher中添加另一行,如
yield takeEvery('DELETE_API_DATA',deleteApiData')
。当然,
takeEvery
是非阻塞的,因此您可以将多个代码放在彼此后面,这样就可以工作了。
sagaMiddleware.run(requestWatcher);