У меня есть этот редукционный крючок. По сути, я буду создавать fetchStudents для учащихся, округов, школ и т. д. Вместо того, чтобы переписывать этот код, я, по сути, хочу иметь возможность передавать URL-адрес и тип. Как я могу это сделать?
import fetch from 'isomorphic-fetch';
import { createAction } from 'utils/actionUtils';
import * as types from './StudentConstants';
export const setLoading = createAction(types.SET_LOADING);
const getStudents = students => ({
type: types.SET_STUDENTS,
payload: students,
});
export const fetchStudents = (students) => {
return (dispatch) => {
return fetch('http://gsndev.com/gsndb/student/', {
method: 'GET',
headers: {
Accept: 'application/json',
Authorization: `JWT ${localStorage.token}`,
},
})
.then(response => response.json())
.then((s) => {
dispatch(getStudents(s));
})
.catch(error => (error));
};
};
export const fetchStudents = (url, type) => {?
Итак, вы в основном хотите многоразовую функцию, которая может получать данные об учениках, округах или школах, да? Итак, функция fetchData, которая на основе переданного URL-адреса и типа сохраняет данные об учениках, округах или школах для сокращения





fetchStudents — нормальная функция. Поэтому передайте любые аргументы, которые вы хотите, и используйте эти аргументы для логики ветвления.
Например
export const fetchStudents = (type, url) => {
return (dispatch) => {
return fetch(url, { // Here you may put url
method: 'GET',
headers: {
Accept: 'application/json',
Authorization: `JWT ${localStorage.token}`,
},
})
.then(response => response.json())
.then((s) => {
switch (type) {
case 'students':
dispatch(getStudents(s));
break;
case 'district':
dispatch(getDistricts(s)); // There can be action creator for districts
break;
// And so on for other types
}
})
.catch(error => (error));
};
};
Это... уже функция