我的应用程序中有一个可扩展的部分列表,我需要通过两个不同的api调用填充其中的值。在this链接中,样本是从局部变量填充的。我也注意到数据应该像:
const MockData = [
...
{
header: 'sectionHeader',
member: [
...
{
title: 'memberTitle',
content: 'content',
},
...
]
},
...
]
我将来自两个API的响应解析为上述格式。并将值保存在状态变量中。如果我将此状态变量值设置为可扩展列表,则会显示错误。如果假设我使用console.log()打印状态变量值,然后复制该值并将其保存到本地变量,然后使用该变量来填充可工作的列表。我知道这听起来很混乱。我从控制台复制了值,以检查解析json的方式是否存在任何错误。好吧,我不认为我解析的方式是错误的。谁能帮忙。
这是我的渲染
render() {
if (this.state.hasData) {
var data = this.state.processedData;
console.log("return");
console.log(data);
return (
<ExpandableList
dataSource={this.state.processedData}
headerKey="title"
memberKey="member"
renderSectionHeaderX={this._renderHeader}
renderRow={this._renderRow}
/>
);
} else {
return <ActivityIndicator style={{ flex: 1 }} />
}
}
任何帮助将不胜感激
谢谢。
编辑1。
在大多数可扩展列表示例中,列表是从本地存储中填充的。正在从状态变量填充列表。这是问题
编辑2。
这是我将两个API解析为所需格式的方式
processList =() =>{
console.log("ProcessList");
var students = this.state.data;
var stuLength = students.length;
var tempStuLength = 0;
var main = "[";
this.state.data.map((userData) => {
tempStuLength = tempStuLength + 1;
var title = '{ title: {' + 'StudentName: ' + JSON.stringify(userData.StudentName ) +', ' + 'studentId:' + JSON.stringify( userData.StudentID )+ ', '+ 'name:' + JSON.stringify(userData.StudentName) + ', ' + 'parentName:' + JSON.stringify(userData.FatherName) + ', ' + 'dob:' + JSON.stringify(userData.DOB) + ', ' + 'image:' + JSON.stringify(userData.CivilID) + '},';
var member = 'member: ['
var tempFee = this.state.feesDetails
var feeLength = tempFee.length;
var tempCount = 0;
this.state.feesDetails .map((fees) =>{
if( userData.StudentName === fees.StudentName){
tempCount = tempCount + 1;
if (tempCount !== 1){
member = member.concat(",")
}
var feeItem = '{ title:' + JSON.stringify(fees.StudentName )+ ', date:' + JSON.stringify(fees.FeeDueDate) + ', type:' + JSON.stringify(fees.FeeDescription) + ', amount:' + JSON.stringify(fees.FeeAmount) + '}'
member = member.concat( feeItem);
}
});
tempCount == 0;
member = member.concat("] }");
if(tempStuLength !== stuLength){
member = member.concat(",")
}
title = title.concat(member);
main = main.concat(title);
});
main = main.concat("]");
console.log(" $$$$$$$$$ ");
console.log(main);
console.log(" $$$$$$$$$ ");
this.setState({
processedData : JSON.stringify(main),
hasData : true
});
};
尝试从状态变量设置解析数据时,当前出现此错误。任何想法... ??
TypeError:TypeError:TypeError:请求的键值不是对象。
答案 0 :(得分:0)
MockData.testData应该是您通过2个API调用创建的自定义数组。一旦形成,请调用setState。然后它应该起作用。
render() {
return (
MockData.testData.length > 0 ?
<ExpandableList
dataSource={MockData.testData}
headerKey="title"
memberKey="member"
renderSectionHeaderX={this._renderHeader}
renderRow={this._renderRow}
/>
:
<ActivityIndicator style={{ flex: 1 }} />
);
}