Я использую 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];)
, который возвращает объект, как на этом изображении :
, но если я пытаюсь сделать console.log(ratingsStore.getRatings()[0].rating;)
, я получаю ошибку как в предмете. Что здесь не так ??
ОБНОВЛЕНИЕ: Хорошо, теперь я еще больше запутался. когда я экспортирую window.ratings=ratings
в браузер, я могу получить доступ к каждому полю из объектов в массиве, например, ratings[0].teamName
, и оно печатается на консоль. Все же ratings[0].teamName
все еще не работает в приложении ...