Javascript object.entries要求输入参数不能为null或未定义?
我是react本地开发和使用expo cli的新手。我添加了一个react本机表组件,它工作正常,但现在我正在调用API,但我面临着这个错误 object.entries要求输入参数不能为null或未定义 表由for循环动态创建。正如您在下面的代码中看到的:Javascript object.entries要求输入参数不能为null或未定义?,javascript,reactjs,react-native,object,mobile-development,Javascript,Reactjs,React Native,Object,Mobile Development,我是react本地开发和使用expo cli的新手。我添加了一个react本机表组件,它工作正常,但现在我正在调用API,但我面临着这个错误 object.entries要求输入参数不能为null或未定义 表由for循环动态创建。正如您在下面的代码中看到的: import React, {useEffect, useState} from 'react'; import { StyleSheet, View,Text, ScrollView } from 'react-native'; impo
import React, {useEffect, useState} from 'react';
import { StyleSheet, View,Text, ScrollView } from 'react-native';
import { Table, TableWrapper, Row } from 'react-native-table-component';
import Constants from 'expo-constants';
import Header from './header';
import axios from 'react-native-axios';
const AllData = ({navigation}) => {
const [dataCSV, setData] =useState([]);
const pressHandler = ()=>{
navigation.toggleDrawer();
}
useEffect(()=>{
loadData();
},[])
const loadData = async () =>{
const result = await axios.get("https://hebruapp.herokuapp.com/api/hebru/");
setData(result.data);
}
const state = {
tableHead: ['שם_מכשיר', 'מספר_סידורי', 'סטטוס', 'גרסת_תוכנה', 'תוכנה', 'מודל', 'גרסת_קושחה', 'הגדרות_תקשורת', 'קוד_איתחול_פינפד','מספר_מסוף','מספר_מסוף',
'מספר_מוטב',
'מספר_קופה',
'שם_בית_העסק',
'מספר_עוסק',
'מספר_עוסק_בסליקה',
'סניף',
'משווק',
'תאריך_הקמה',
'תאריך_גישה_אחרונה_למערכת',
'איש_קשר',
'טלפון_איש_קשר',
'כתובת_מלא'],
widthArr: [40, 60, 80, 100, 120, 140, 160, 180, 200,180,180,180,180,180,180,180,180,180,180,180,180,180,]
}
const tableData = [];
for (let i = 0; i < 30; i += 1) {
const rowData = [];
for (let j = 0; j < 22; j += 1) {
for (let [key, value] of Object.entries(dataCSV[j])) {
rowData.push(`${value}`);
}
}
tableData.push(rowData);
}
return (
<View>
<Header onPress={pressHandler} title="All Data" />
<View style={styles.containerDatatable}>
<ScrollView horizontal >
<View>
<Table borderStyle={{borderWidth: 1, borderColor: '#C1C0B9'}}>
<Row data={state.tableHead} widthArr={state.widthArr} style={styles.header} textStyle={styles.text}/>
</Table>
<ScrollView style={styles.dataWrapper}>
<Table borderStyle={{borderWidth: 1, borderColor: '#C1C0B9'}}>
{
tableData.map((rowData, index) => (
<Row
key={index}
data={rowData}
widthArr={state.widthArr}
style={[styles.row, index%2 && {backgroundColor: '#F7F6E7'}]}
textStyle={styles.text}
/>
))
}
</Table>
</ScrollView>
</View>
</ScrollView>
</View>
</View>
)
}
const styles = StyleSheet.create({
containerDatatable: { padding: 16, paddingTop: 10, backgroundColor: '#fff' },
header: { height: 50,backgroundColor: "radial-gradient(ellipse at left bottom, rgb(163, 237, 255) 0%, rgba(57, 232, 255, 0.9) 59%, rgba(48, 223, 214, 0.9) 100% )", },
text: { textAlign: 'center', fontWeight: '100' },
dataWrapper: { marginTop: -1 },
row: { height: 40, backgroundColor: '#E7E6E1' },
dataHeading:{textAlign:'center', fontWeight:'bold', marginBottom:10}
});
export default AllData;
传递jdataCSV[j]
的索引值时的行
如何解决此问题?您的
dataCSV
初始值是[]
。使用该值的代码从不检查dataCSV
的长度,它只是从0到21(包括0)<当dataCSV
为[]
为未定义的时,code>dataCSV[0]
,该值不是传递给对象的有效值。条目
解决办法是不这样做。您不这样做的具体方式取决于代码整体应该做什么,但其中一种方法是向循环中添加边界检查:
for (let j = 0, len = Math.min(22, dataCSV.length); j < len; j += 1) {
// −−−−−−−−−−−^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^−−−−−−^^^
for(设j=0,len=Math.min(22,dataCSV.length);jfor(让i=0;i<30;i+=1){const rowData=[];for(让j=0,len=Math.min(22,dataCSV.length);j
${value});}tableData.push(rowData);}
你说我需要这样做吗
for (let j = 0, len = Math.min(22, dataCSV.length); j < len; j += 1) {
// −−−−−−−−−−−^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^−−−−−−^^^