【问题标题】:One data from two get method一个数据来自两个 get 方法
【发布时间】:2019-08-27 00:58:50
【问题描述】:

我有两个单独的 axios get 方法,将响应数据映射到单独的数据对象。然后我在渲染中映射数据。我想将两个 axios 中的数据放入一个对象中,以便在渲染中仅映射一个对象。我怎么能这样做?

两个获取函数之一

getData() {
  axios
    .get("http://localhost/GetAll?", {
      params: { rok: this.state.rok, idUchwaly: "1" },
      headers: { Authorization: "Bearer " + this.state.token }
    })
    .then(response =>
      response.data.map(data2 => ({
        IDA: `${data2.idZadania}`,
        idWersji: `${data2.idWersji}`,
        Dzial: `${data2.dzial}`
      }))
    )
    .then(data2 => {
      if (data2 == "") {
      } else {
        this.setState({ data2, isLoadingdane: true });
      }
    })
    .catch(error => this.setState({ error }));
}

然后我将数据映射到一个表中

{this.state.isLoadingdane ? (
  data2.map(user2 => {
    const { IDA, idWersji, Dział } = user2;
    return (
      <tr id={IDA}>
        <td>
          <p>{idWersji}</p>
        </td>
        <td>
          <p>{Dzial}</p>
        </td>
      </tr>
    );
  })
) : (
  <tr>
    <td colSpan="3">
      <center>
        <p>Brak</p>
      </center>
    </td>
  </tr>
)}

我想要一张表,我可以在其中放入两个 get 函数的值

类似这样的:{value from getData}{value from getData2}

【问题讨论】:

  • [...data1, ...data2].map( /*...*/?
  • 它没有用。它只是映射第一个数据,然后是下面的第二个

标签: reactjs dictionary get axios


【解决方案1】:

您可以返回承诺并等待两个请求都以Promise.all 结束,然后将两个数组中的对象合并到一个数组中,而不是直接将响应置于状态中。

示例

class App extends React.Component {
  componentDidMount() {
    Promise.all([this.getData(), this.getData2]).then(([data1, data2]) => {
      this.setState({
        data2: data1.map((item, index) => ({ ...item, ...data2[index] })),
        isLoadingdane: true
      });
    });
  }

  getData = () => {
    return axios
      .get("http://localhost/GetAll?", {
        params: { rok: this.state.rok, idUchwaly: "1" },
        headers: { Authorization: "Bearer " + this.state.token }
      })
      .then(response =>
        response.data.map(data2 => ({
          IDA: `${data2.idZadania}`,
          idWersji: `${data2.idWersji}`,
          Dzial: `${data2.dzial}`
        }))
      );
  };

  getData2 = () => {
    return axios.get(/* ... */);
    // ...
  };

  render() {
    // ...
  }
}

【讨论】:

  • 现在我看到了小问题。例如,当一个 json 有 10 条记录而第二个 json 有 6 条记录时,这些记录不适合。我如何添加 idZadania 的比较以将表中的值放在正确的位置
  • @BartekMichułka 这极大地改变了问题,在回答完问题后更改问题并不是一个好习惯。如果您无法弄清楚,请考虑在新问题中创建Minimal, Complete, and Verifiable example,有人会帮助您。
【解决方案2】:

Bartek,你需要这样映射结果:

const first = [{
  x: 'x',
  y: 'y',
}];

const second = [{
  x: 'x',
  z: 'z',
}];

const all = first.map(o => ({ ...o, ...second.find(f => f.x === o.x)}));

console.log(all);

【讨论】:

    猜你喜欢
    • 2016-07-17
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多