Javascript 如何在任何分派操作上运行redux saga中间件?
我在“usersaga.js”中定义了以下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
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);