Rozpoczynam pracę nad projektem Redux z Redux i jest to kompletny chaos, założyłem interfejs Store as w następujący sposób:

interface Store {
  ads: {
    loading: boolean;
    data: Ad[];
    errors: Error;
    isPro: boolean; 
  };
}

interface Ad {
  id: any;
  title: any;
  body: any;
  price: any;
  latitude: any;
  longitude: any;
}

Mam tę stałą do określenia jako akcja do wysłania po:

export const TYPE_ADD_JOB_ANNOUNCEMENT_REQUEST = "action/addJobAnnouncementRequest";

A potem mam swój reduktor:

   import {
  TYPE_ADD_JOB_ANNOUNCEMENT_REQUEST, 
} from "../constants/actions";

export const reducer = (Store: Store, action: any) => {
  switch (action.type) {

    case TYPE_ADD_JOB_ANNOUNCEMENT_REQUEST:
      console.log("Test");
      return {
        ...Store,
        annuncio: [...Store.ads.data, action.payload]
      };

    default:
      console.log("dont return nothing");
      break;
  }
  return Store;
};

Już działa ReduxDevTools, testuję je z innym dziennikiem konsoli i działa dobrze, teraz dlaczego, kiedy reduxdevotools próbują wywołać akcję z ładunkiem, (przykład:

{
  type: 'action/addJobAnnouncementRequest',
  payload: { title: "test" }
}

Daje mi różne błędy, jeśli spróbuję innego testu, ale w tym samym trybie, np

sklep jest niezdefiniowany,

Lub

nie można odczytać „reklam” usługi

Myślę, że jest problem z moją składnią javascript lub nie wiem, czy ktoś może mi pomóc?

0
Nicola 20 listopad 2019, 17:11
Musimy zobaczyć więcej twojego reduktora. Interfejs mówi, że ads jest tam, ale nie możemy sprawdzić, czy to prawda. Wygląda również na to, że próbujesz użyć interfejsu jako obiektu stanu, ale nie możesz tego powiedzieć
 – 
Brian Thompson
20 listopad 2019, 17:23
Zmontowany stary, możesz rzucić okiem?
 – 
Nicola
20 listopad 2019, 17:34

1 odpowiedź

Powinieneś także zainicjować swój obiekt stanu, ponieważ wygląda na to, że jest to źródło błędu dotyczącego ads. Jeśli chcesz, możesz użyć store lub Store zamiast state.

const initialState: Store = {
  ads: {
    loading: false,
    data: [],
    errors: '',
    isPro: false, 
  };
}

export const reducer = (state = initialState, action: any) => {
  switch (action.type) {
    case TYPE_ADD_JOB_ANNOUNCEMENT_REQUEST:
      return {
        ...state,
        ads: [...state.ads.data, action.payload] // I'm assuming you meant `ads` here?
      };

    default:
      return state;
  }
};
0
Brian Thompson 20 listopad 2019, 17:56
Zapomniałem powiedzieć, jego maszynopis jest taki sam?
 – 
Nicola
20 listopad 2019, 17:49
Cóż, ponieważ pisma są usuwane, zanim trafią do przeglądarki, może nie spowodować błędu, ale może to spowodować błąd w kompilatorze. Nie jestem w 100% pewien. Myślę, że głównym problemem jest inicjalizacja reduktora.
 – 
Brian Thompson
20 listopad 2019, 17:53
Patrząc dalej, nie sądzę, aby te same nazwy były problemem odniesieniem. Osobiście uważam to za mylące. Ale usunę tę część z mojej odpowiedzi
 – 
Brian Thompson
20 listopad 2019, 17:54