Вызывающий массив получает ошибку: undefined не является объектом - PullRequest
0 голосов
/ 04 февраля 2020

Возникла проблема с моим редуктором. Я могу извлечь из массива базы данных по команде + S, но когда я делаю жесткий refre sh, он не может найти данные.

  1. И я получаю ошибку: undefined не является объектом (оценка 'quizFire [0]') *

Я могу загрузить массив quizFire, я просто не могу вызвать любой из его элементов. Я пробовал несколько вариантов, но я не уверен, правильно ли я храню или вызываю базу данных.

import React, {useEffect} from 'react';
import { View, Text, } from 'react-native';
import { useSelector, useDispatch } from 'react-redux';

import * as paidRoundActionFire from '../store/action/paidRoundAction';

const ThirdRound = props =>{

  const dispatch = useDispatch();

  useEffect(() => {
    dispatch(paidRoundActionFire.fetchProducts());
  }, [dispatch]);

  const quizFire = useSelector(state => state.paidQuiz.questionsFire);

  return(
    <View> 
      <Text>
      {quizFire[0].answer1}
      </Text>
    </View>
  )
}
export default ThirdRound;
//Store Reducer

import { Dimensions } from 'react-native';
import { SET_QUESTIONS } from '../action/paidRoundAction';

var {height, width} = Dimensions.get('window'); 
//const incrementToMoveForward = (width+30)/20;

const initialState = {
//totalCount: questions.length,
questionsFire: [],
};

export default (state = initialState, action) => {
    //state.activeQuestionIndex + 1;
    switch (action.type) {

    case SET_QUESTIONS: {
        return {
            questionsFire: action.questionsFireRecall,
        }
    }    
    default:
      return {state};
  }


};
//Store Action

import Questions from "../../models/questions";

export const SET_QUESTIONS = 'SET_QUESTIONS';



export const fetchProducts = () => {

    return async dispatch => {
        try {
            //any async code you want
        const response = await fetch(
           'https://my-quiz-questions.firebaseio.com/questions.json',) 

    const resData = await response.json(); 
    console.log("async/await based");
    const loadedQuestions = [];

        for (const key in resData) {
            loadedQuestions.push(
                new Questions(
                key,
                resData[key].answer1,
                resData[key].answer2,
                resData[key].answer3,
                resData[key].correctAnswer,
                resData[key].explanation,
                resData[key].question

                )
            )
        }


    dispatch({ type: SET_QUESTIONS, questionsFireRecall: loadedQuestions });
        }

    catch (err) {
        // send to custom analytics server
        throw err;
      }
    };
  };


1 Ответ

0 голосов
/ 06 февраля 2020

В начале у вас есть quizFire, установленный как пустой массив []. Но вы хотите визуализировать некоторый элемент из этого пустого массива, и это не определено. Попробуйте сделать так: quizFire.length && quizFire[0].something

Почему вы используете dispatch в качестве эффекта useEffect? Потому что мусор говорит тебе это делать или ты сделал это специально?

...