【问题标题】:Not able to set data to expandable list in react native无法在本机反应中将数据设置为可扩展列表
【发布时间】:2018-09-28 12:17:26
【问题描述】:

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

【问题讨论】:

  • 什么是 MockData.testData?我认为您应该在数据源中传递 MockData。
  • @Sadhu 那是我复制粘贴状态变量值的变量。我正在尝试所有的价值。我会更新
  • MockData.testData 应该是一个对象数组。

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


【解决方案1】:

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

【讨论】:

  • 如果我将数据设置为可扩展列表,如`dataSource = {this.state.processedData}`,是否有任何问题。最初显示加载程序,加载显示直到我解析 api。
猜你喜欢
  • 2017-08-08
  • 1970-01-01
  • 2018-04-01
  • 1970-01-01
  • 2018-07-08
  • 2020-04-07
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
相关资源
最近更新 更多