Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 转换为将API数据发送到要在折线图中使用的其他组件_Javascript_Reactjs - Fatal编程技术网

Javascript 转换为将API数据发送到要在折线图中使用的其他组件

Javascript 转换为将API数据发送到要在折线图中使用的其他组件,javascript,reactjs,Javascript,Reactjs,我正在尝试了解如何将这些数据设置为道具,或者我需要做些什么才能在使用Chart.js的各个折线图组件中使用这些数据。Api调用正在工作,我在两个单独的Api.js文件中获得了所需的所有数据,并且能够将其呈现出来。然而,现在我有了它,我想知道我最好的选择是什么,将它发送过来,以便能够显示在折线图中。我还得到了一个错误,列表中的每个子项都应该有一个键属性,您可以看到我正在尝试分配键。我在这方面没有经验,所以任何帮助和指导都将不胜感激 下面是一个api调用,用于获取我试图跨组件共享的数据: impor

我正在尝试了解如何将这些数据设置为道具,或者我需要做些什么才能在使用Chart.js的各个折线图组件中使用这些数据。Api调用正在工作,我在两个单独的Api.js文件中获得了所需的所有数据,并且能够将其呈现出来。然而,现在我有了它,我想知道我最好的选择是什么,将它发送过来,以便能够显示在折线图中。我还得到了一个错误,
列表中的每个子项都应该有一个键属性
,您可以看到我正在尝试分配键。我在这方面没有经验,所以任何帮助和指导都将不胜感激

下面是一个api调用,用于获取我试图跨组件共享的数据:

import React, { Component } from 'react'

let headers = {
  'QB-Realm-Hostname': 'XXXXXXXXXXXXX.quickbase.com',
  'User-Agent': 'FileService_Integration_V2.1',
  'Authorization': 'QB-USER-TOKEN XXXXX_XXXX_XXXXXXXXXXXXXXXXXXXXXX',
  'Content-Type': 'application/json'
};

class JobsTableApi extends Component {
  constructor(props) {
    super(props);

    this.state = {
      data: null,
    };
  }

  componentDidMount() {
    this.fetchData();
  }    

  fetchData = () => {    
     let body = {"from":"bpz99ram7","select":[3,6,80,81,82,83,86,84,88,89,90,91,92,93,94,95,96,97,98,99,101,103,104,105,106,107,109,111,113,115,120,123,224,225,226,227,228,229,230,231,477,479,480,481],"where": "{40.CT. 'In Progress'}","sortBy":[{"fieldId":6,"order":"ASC"}],"groupBy":[{"fieldId":40,"grouping":"equal-values"}],"options":{"skip":0,"top":0,"compareWithAppLocalTime":false}}

    fetch('https://api.quickbase.com/v1/records/query', {
      method: 'POST',
      headers: headers,
      body: JSON.stringify(body)
    }).then(response => response.json())
      .then( data => this.setState({ data })
      );
    }

  render() {
    const { data } = this.state;

      if (data === null) return 'Loading...';

    return (
      <ul>
        {Object.keys(data["data"]).map(item =>
          <div>
            <h2>
              {data["data"][item][3].value} -- {data["data"][item][6].value}
              <br />
              <a>{data["data"][item][40].value}</a>
            </h2>
            <h5>Overall Project Totals:</h5>
              <p key="AdjContractAmt">Adj Contract Amount: ${Math.round(data["data"][item][80].value)},</p>
              <p key="DesignHours">Design Hours: {Math.round(data["data"][item][88].value)},</p>
              <p key="DesignAmount">Design Amount: ${Math.round(data["data"][item][91].value)},</p>
              <p key="SubRoughHours">SubRough Hours: {Math.round(data["data"][item][92].value)},</p>
              <p key="SubRoughAmount">SubRough Amount: ${Math.round(data["data"][item][95].value)},</p>
              <p key="RoughHours">Rough Hours: {Math.round(data["data"][item][96].value)},</p>
              <p key="RoughAmount">Rough Amount: ${Math.round(data["data"][item][98].value)},</p>
              <p key="FinishHours">Finish Hours: {Math.round(data["data"][item][104].value)},</p>
              <p key="FinishAmount">Finish Amount: ${Math.round(data["data"][item][107].value)},</p>
              <p key="CloseHours">Close Hours: {Math.round(data["data"][item][477].value)},</p>
              <p key="CloseAmount">Close Amount: ${Math.round(data["data"][item][480].value)},</p>
              <p key="CurrentHours">CURRENT/ACTUAL Hours: {Math.round(data["data"][item][479].value)},</p>
              <p key="CurrentAmount">CURRENT/ACTUAL Amount: ${Math.round(data["data"][item][224].value)}</p>
          </div>
        )}
      </ul>
    )
  }
}

export default JobsTableApi;

谢谢

这是关于结构内部div的标识:

>src
    >components
        >charts
            >multipleLineCharts.js
        >API
            >api.js1
            >api.js2

映射元素数组时,请执行以下操作:

  {Object.keys(data["data"]).map(item, i =>
          <div key = {i}>

          </div>
  }
{Object.keys(data[“data”]).map(item,i=>
}
用于显示我建议使用的图表

不建议使用索引作为每个元素的键。最好使用其他一些信息,如
item.id
可存储为键。折线图组件与检索数据的组件(父、子、同级)的关系在哪里?现在,我正在使用api文件在api文件夹中的components文件夹中提取数据,该文件夹中还包含一个charts文件夹,其中包含我希望数据流向的所有折线图。然后在我的app.js中,我将使用这些折线图显示在一个页面上。有几种方法可以做到这一点。一种方法是在app.js文件中调用数据(我假设这是图表的父文件)并将数据传递给每个图表。另一种方法是,在App.js中,您可以定义数据道具,我猜每个api文件一个,并在api文件中设置检索到的数据的状态。然后,您可以将数据道具传递给图表文件。这就是我不确定如何做的地方。例如,现在[80]我需要一个字段,但我不能做props。[80],比如你如何做props.name。所以我不确定如何转换它,以便能够根据需要调用我组件上的每个字段。你可以获取数据,使用函数以对你有用的方式构造数据,并将其作为道具传递。