criador ação, muitas params sendo enviado para redutor

votos
0

Estou enviando a muito à minha redutor:

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

Na minha redutor de eu enviá-lo a dados que eu preciso para classificar, e os parâmetros 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 };

Ao invés de enviar datana ação, eu posso importar este em minha reducer, assim:

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

Meu mapDispatchToPropsestá se tornando muito confuso também:

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 19/12/2018 em 14:13
fonte usuário
Em outras línguas...                            


2 respostas

votos
1

Você pode drasticamente simplificar o seu código usando a forma "objeto taquigrafia" demapDispatch . Apenas definir um objeto com esses criadores de ação, como:

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

Além disso, eu acho que você provavelmente poderia consolidar alguns desses "set" ações para baixo a uma única "USER_FORM_UPDATED"ação ou algo semelhante.

Respondeu 19/12/2018 em 16:53
fonte usuário

votos
0

Se os dados é um objeto estático pode importá-lo a partir do redutor. Ele vai ficar uma função pura. Mas gostaria de fazer minha redutor tão simples quanto possível e talvez eu mover esta lógica para o criador ação. É por isso que nós criamos criadores de ação em primeiro lugar que eles podem conter a lógica também.

Por exemplo:

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
  };
}
Respondeu 19/12/2018 em 14:32
fonte usuário

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