creador de acción, demasiados parametros que se envía al reductor

votos
0

Estoy enviando a mucho a mi reductor:

export const setStudent = (data, value, year, group, showStudent) => ({
    type: SET_STUDENT,
    data,
    value,
    year,
    group,
    showStudent
});

En mi reductor de la envío los datos que necesito para ordenar, y los parametros relevantes:

  case SET_STUDENT:
        let studentName = data
            .find(option => {
                return option.id == year;
            })
            .options.find(option => {
                return option.id == group;
            })
            .options.find(option => {
                return option.id == value;
            }).label;

        return { ...state, student: value, label: studentName };

En lugar de enviar dataen la acción, puedo importar esto en mi reducer, así:

import { data } from ../config/calendars.js;

Mi mapDispatchToPropsse está volviendo muy confuso también:

const mapDispatchToProps = dispatch => ({
    fetchEvents: id => dispatch(fetchEvents(id)),
    isLoadingCredentials: loadingCredentials =>
        dispatch(isLoadingCredentials(loadingCredentials)),
    setCredentials: credentials => dispatch(setCredentials(credentials)),
    setYear: year => dispatch(setYear(year)),
    setGroup: (group, data, year) =>
        dispatch(setGroup(group, data, year)),
    setStudent: (data, e, year, group, showStudent) =>
        dispatch(setStudent(data, e, year, group, showStudent)),
    resetForm: () => dispatch(resetForm()),
    setAuthenticated: value => dispatch(setAuthenticated(value))
});
Publicado el 19/12/2018 a las 14:13
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
1

Se puede simplificar drásticamente su código mediante el uso de la forma "objeto abreviada" demapDispatch . Basta con definir un objeto con los creadores de acción, tales como:

const mapDispatchToProps = {
    fetchEvents,
    isLoadingCredentials,
    setCredentials,
    setYear,
    setGroup,
    setStudent,
    resetForm,
    setAuthenticated,
}

Además, supongo que probablemente podría consolidar algunas de esas acciones "set" a una sola "USER_FORM_UPDATED"acción o algo similar.

Respondida el 19/12/2018 a las 16:53
fuente por usuario

votos
0

Si los datos es un objeto estático puede importar desde el reductor. Se mantendrá una función pura. Pero me gustaría hacer mi reductor de lo más simple posible y tal vez mover esta lógica para el creador de acción. Es por eso que creamos creadores de acción en el primer lugar de que pueden contener lógica también.

Por ejemplo:

import { data } from "../config/calendars.js";

export const setStudent = (value, year, group, showStudent) => {
  let studentName = data
    .find(option => {
      return option.id == year;
    })
    .options.find(option => {
      return option.id == group;
    })
    .options.find(option => {
      return option.id == value;
    }).label;

  return {
    type: "SET_STUDENT",
    student: value,
    label: studentName
  };
}
Respondida el 19/12/2018 a las 14:32
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more