reactjs - 调用数组得到错误:未定义不是对象
问题描述
我的减速机有问题。我可以在 command+S 上从数据库数组中提取数据,但是当我进行硬刷新时,它找不到数据。
- 我得到错误:未定义不是一个对象(评估'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;
}
};
};
解决方案
一开始您已quizFire
设置为空数组[]
。但是你想从这个空数组中渲染一些项目,这是未定义的。尝试渲染它quizFire.length && quizFire[0].something
你为什么把dispatch
作为 useEffect 的部门?因为垃圾告诉你这样做还是你故意这样做的?
推荐阅读
- vue.js - 从组件外部访问特殊布局(NativeScript + Vue)
- kubernetes - 将 Cassandra 迁移到 GCP
- yaml - 如何使用 jsonnet 在 YAML 中嵌入文字 json?
- python - 修改 pandas df 中的单元格不成功
- android - 当应用程序处于后台时,HTTP 请求因后台限制而停止
- ansible - Ansible playbook 任务 - 命令找不到 pid,但服务已正确启动
- python - 循环需要很长时间才能运行
- python - 使用 astropy 时的 Numpy 版本问题
- angular - 如何在 Angular 反应形式和验证器中使用货币管道
- c++ - Accessing functions of a derived crtp class from the base calls