0

我的应用程序中有一个可扩展的部分列表,我需要从两个不同的 api 调用中填充值。在链接中,示例是从局部变量中填充的。我还注意到数据应该是这样的:

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:请求的键值不是对象。

4

1 回答 1

0

MockData.testData should be the custom array which you created from the 2 API calls. Once it is formed do call setState. Then it should work.

render() {
  return (
    MockData.testData.length > 0 ?
    <ExpandableList
      dataSource={MockData.testData}
      headerKey="title"
      memberKey="member"
      renderSectionHeaderX={this._renderHeader}
      renderRow={this._renderRow}

    />
    :
    <ActivityIndicator style={{ flex: 1 }} />
  );
}
于 2018-09-28T12:37:22.513 回答