Ошибка типа: не удается прочитать свойство 'rating' из неопределенного - PullRequest
0 голосов
/ 26 апреля 2020

Я использую React для вызова внутреннего API и получения массива JSON объектов. Я могу распечатать массив объектов и отдельных объектов на консоли, но как только я пытаюсь получить доступ к значениям внутри объекта, я получаю ошибку типа. Я использую флюс-каркас. Вот мои действия:

//ratingsActions.js

import dispatcher from "../appDispatcher";
import * as ratingsApi from "../api/ratingsApi";
import actionTypes from "./actionTypes";


export function loadRatings() {
  return ratingsApi.getRatings().then(ratings => {
    dispatcher.dispatch({
      actionType: actionTypes.LOAD_RATINGS,
      ratings: ratings
    });
  });
}

И мой магазин:

//ratingsStore.js 

import { EventEmitter } from "events";
import Dispatcher from "../appDispatcher";
import actionTypes from "../actions/actionTypes";

const CHANGE_EVENT = "change";
let _ratings = [];

class RatingsStore extends EventEmitter {
  addChangeListener(callback) {
    this.on(CHANGE_EVENT, callback);
  }

  removeChangeListener(callback) {
    this.removeListener(CHANGE_EVENT, callback);
  }

  emitChange() {
    this.emit(CHANGE_EVENT);
  }

  getRatings() {
    return _ratings;
  }
}

const store = new RatingsStore();

Dispatcher.register(action => {
  switch (action.actionType) {
    case actionTypes.UPDATE_RATINGS:
      store.emitChange();
      break;
    case actionTypes.LOAD_RATINGS:
      _ratings = action.ratings;
      store.emitChange();
      break;
    default:
  }
});

export default store;
//component
  const [ratings, setRatings] = useState(ratingsStore.getRatings());

  useEffect(() => {
    ratingsStore.addChangeListener(onChange);
    if (ratingsStore.getRatings().length === 0) loadRatings();
    return () => ratingsStore.removeChangeListener(onChange);
  }, []);

  function onChange() {
    setRatings(ratingsStore.getRatings());
  }

console.log(ratingsStore.getRatings()[0]) ;

Теперь в моем компоненте я пытаюсь сделать console.log(ratingsStore.getRatings()[0];), который возвращает объект, как на этом изображении :

json object

, но если я пытаюсь сделать console.log(ratingsStore.getRatings()[0].rating;), я получаю ошибку как в предмете. Что здесь не так ??

ОБНОВЛЕНИЕ: Хорошо, теперь я еще больше запутался. когда я экспортирую window.ratings=ratings в браузер, я могу получить доступ к каждому полю из объектов в массиве, например, ratings[0].teamName, и оно печатается на консоль. Все же ratings[0].teamName все еще не работает в приложении ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...