Как превратить это в функцию

У меня есть этот редукционный крючок. По сути, я буду создавать 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));
  };
};

Это... уже функция

jonrsharpe 21.06.2019 22:08
export const fetchStudents = (url, type) => {?
Matt Aft 21.06.2019 22:11

Итак, вы в основном хотите многоразовую функцию, которая может получать данные об учениках, округах или школах, да? Итак, функция fetchData, которая на основе переданного URL-адреса и типа сохраняет данные об учениках, округах или школах для сокращения

Blundering Philosopher 22.06.2019 00:19
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
3
43
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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));
    };
};

Другие вопросы по теме