是的,将业务逻辑放到saga中是一种常见的解决方案。saga是一种用于管理复杂业务流程的模式,它可以协调多个事务性操作的执行顺序,并保持数据的一致性。
下面是一个使用redux-saga库的示例代码,展示了如何在saga中处理业务逻辑:
import { takeEvery, put, call } from 'redux-saga/effects';
import { fetchDataSuccess, fetchDataError } from './actions';
import { fetchApiData } from './api';
// 定义一个worker saga,用于处理业务逻辑
function* fetchSaga(action) {
try {
// 调用api函数获取数据
const data = yield call(fetchApiData, action.payload);
// 发送成功的action
yield put(fetchDataSuccess(data));
} catch (error) {
// 发送错误的action
yield put(fetchDataError(error.message));
}
}
// 定义一个watcher saga,用于监听特定的action
function* watchFetchData() {
yield takeEvery('FETCH_DATA_REQUEST', fetchSaga);
}
// 导出根saga,用于启动所有的watcher saga
export default function* rootSaga() {
yield all([
watchFetchData(),
// 其他的watcher sagas
]);
}
在上面的示例中,fetchSaga
是一个worker saga,它通过调用fetchApiData
函数从API获取数据。如果获取数据成功,它会发送一个成功的action,否则发送一个错误的action。
watchFetchData
是一个watcher saga,它使用takeEvery
函数监听FETCH_DATA_REQUEST
action,并在每次收到该action时调用fetchSaga
。
最后,在rootSaga
中启动所有的watcher saga,包括watchFetchData
。
这样,当应用程序中的组件发起FETCH_DATA_REQUEST
action时,saga将拦截该action并处理业务逻辑。