在 React.js 中更新数组并呈现新数据

Update array and Rendder new data in React.js

我在更新和呈现来自 API 调用的新数据时遇到问题。

我现在设置代码的方式如下:

JavaScript 文件以从 API 读取返回的 JSON - 调用:

  1. 我先声明一个数组,索引值如下:

    const dataArray= [
      {
         data1:'',
         data2:'',
      }
    ];
    
  2. 我有一个函数可以解析来自 API 调用的数据,并将新数据重新分配给数组,如下所示:

    dataArray.data1 = newData1;

在从 JS 文件导出 dataArray 之前:

export { dataArray }

React部分设置如下:

  1. 我先创建构造函数:
  constructor(props){
    super(props);
    
    this.state = {
      data: dataArray,
    }
}
  1. 然后,在渲染中,我创建了一个名为 data 的常量,并将其设置为 this.state:
render(){
    const { temperatures } = this.state;

  return (  
    <div className="App">
      <Card        
        data1 = {  
          data.map(dataArray=> 
            <p key={data.data1}>
              {data.data1}
            </p>
            )
          }
       );
    };
  }
export default App;

如果我在 JavaScript 文件中插入一些任意数据 dataArray,这工作正常,但是当新数据可用时,这个新数据不会呈现到 DOM.

我挖了一下,我知道我需要使用 this.setState 在新数据可用时更新 DOM,而不是 this.state,但我不是确定在哪里使用 setState...

此致, 汉斯-克里斯蒂安

整个代码如下所示: App.js

class App extends React.Component{
  constructor(props){
    super(props);
    
    this.state = {
      temperatures: forecastedTemperatures,
    }
    
}
  render(){
    const { temperatures } = this.state;
  return (  
    <div className="App">
      <Card       
        data1 = {  
          dataArray.map(data=> 
            <p key={data.data1}>
              {temperature.data1}
            </p>
            )
          }
      />
    </div>
  );
};
}
export default App;

callApiAndParse.js

import React, {Component} from 'react';
const fs = require('fs');

const dataArray= [
  {
    data1:'',
    data2:'',
   
  }
];

function parsionFunction(data1, data2
)
{  

    //This funciton just manipulated the data, and is outside the scope of this question

    dataArray.data1 = data1;
    dataArray.data1 = data2;
    
}

export { dataArray};

您可以使用 React 的生命周期方法之一 -> componentDidMount(), 其中您可以在解析完成时以“异步”方式调用它并“等待”,之后您可以使用 this.setState() 将数据变量设置为状态。当它发生时,你甚至可以使用加载状态来改进你的 ui,这样用户就会知道正在加载某些东西。

示例:

假设您在构造函数中的原始状态变量是:

this.state = {
    dataArray = [],
    loading: true, // As component will be loading.
}

然后状态变化可能会发生这样的事情:

async componentDidMount() {
     try {
         const tempData = await parsingOfRecievedData(APICallFunction());
         this.setState(
            dataArray: tempData,
            loading: !this.state.loading, // Set to false, as prev value was true
         };
     } catch (error) {
          console.log(error.message);
          this.setState(
            loading: !this.state.loading, // Need to handle loading in case of errors / exceptions.
          );
     }
}