【发布时间】:2021-03-16 21:05:04
【问题描述】:
由于我公司的要求,我正在将我的代码从 thunk 迁移到 saga。
使用带有参数的 thunk 发送 api 请求非常简单,我很难弄清楚如何将参数传递给 axios 请求:
redux/sagas/handlers/marketplace.js
import { call, put, takeLatest } from 'redux-saga/effects';
import {
FETCH_ALL_ITEMS_FAIL,
FETCH_ALL_ITEMS_REQUEST,
FETCH_ALL_ITEMS_SUCCESS,
} from '../../types/marketplaceTypes';
import { fetchAllItemsRequest } from '../requests/marketplace';
export function* fetchAllItems(action) {
console.log('MARKET PLACE HANDLER', action);
try {
const { data } = yield call(fetchAllItemsRequest);
yield put({
type: FETCH_ALL_ITEMS_SUCCESS,
payload: data,
});
} catch (error) {
console.log(error, '<== error while saga');
yield put({
type: FETCH_ALL_ITEMS_FAIL,
error: 'Error loading ITEMS list',
});
}
}
export default function* fetchItems() {
yield takeLatest(FETCH_ALL_ITEMS_REQUEST, fetchAllITEMSs);
}
redux/sagas/requests/marketplace.js
import axios from 'axios';
export const fetchAllApisRequest = (ARGS) => {
console.log(ARGS); // Need to pass them from components
return axios.request({
method: 'get',
url: uri,
});
};
rootSaga.js
import { all } from 'redux-saga/effects';
import { fetchAllItems } from '../sagas/handlers/marketplace';
export function* rootSaga() {
yield all([fetchAllItems()]);
}
最后,我是如何调度的:
Component.js
useEffect(() => {
dispatch({
type: FETCH_ALL_ITEMS_REQUEST,
})
}, []) // NOT SURE HOW TO SEND ARGUMENT TO THE AXIOS REQUEST FROM HERE
【问题讨论】:
标签: javascript reactjs redux react-redux redux-saga