无法在react native

时间:2018-09-28 12:17:27

标签: javascript reactjs react-native reactive-programming react-android

我的应用程序中有一个可扩展的部分列表,我需要通过两个不同的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:请求的键值不是对象。

1 个答案:

答案 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 }} />
  );
}