javascript React从API取数,实时列表显示

svmlkihl  于 2023-02-18  发布在  Java
关注(0)|答案(3)|浏览(119)

我想从我的本地API中获取数据,并实时更新显示。从对象中获取并显示为列表,我有,它工作正常,但当api上有新数据可用时,列表不更新。
有人能给我解释一下在我的例子中,实时更新数据获取和显示需要什么吗?

import React from 'react';
import { StyleSheet, Text, View, ActivityIndicator } from 'react-native';

export default class App extends React.Component {

  constructor(props) {
    super(props);
    this.state = {
      isLoading: true,
      dataSource: [],
    }
  }

  componentDidMount() {
    var params = {
      method: 'GET',
      headers: {
        "cache-control": 'no-cache',
        pragma: 'no-cache',
      }
    };

    return fetch('http://192.168.1.54:8000/api/measurement', params)
    .then((response) => response.json())
      .then((responseJson) => {
        this.setState({
          isLoading: false,
          dataSource: responseJson,
        });
      })
      .catch((error) => {
        console.log(error);
      }
    );
  }

  render() {
    if(this.state.isLoading) {
      return (
        <View style={styles.container}>
          <ActivityIndicator />
        </View>
      )
    } else {
      let measurements = this.state.dataSource.map((val, key) => {
        return  <View key={key} style={styles.item}>
                  <Text>{val.hardwareUnit} - {val.measurementType} : {val.value}</Text>
                </View>
      });

      return (
        <View style={styles.container}>
          <Text style={styles.title}>Measurements</Text>
          {/* Display the latest 5 measurements from API */}
          {measurements.slice(Math.max(measurements.length - 5, 0))}
        </View>
      )
    }
  }
}
4dc9hkyq

4dc9hkyq1#

您需要实现套接字。在进行更改时从后端触发事件,并在前端侦听这些更改。在接收到事件时,在前端进行所需的更改

vc9ivgsu

vc9ivgsu2#

为了呈现新数据,你需要先拥有它。为此你需要组件询问数据源。如果它是一个后端服务器,你可以考虑轮询它。如果你需要的数据不需要非常准确,你的应用程序可以处理一些延迟。但这会给服务器带来一些压力。但是您可以继续在服务器上使用无状态方法,并且只要轮询请求具有正确的id就可以不受影响。
在这里,可以设置一个Interval,轮询服务器以获取数据,并轻松地恢复状态。
或者你可以设置一个Web Socket连接,但是这可能需要根据你的使用情况在服务器上保持一些状态。
参考:https://blog.logrocket.com/websocket-tutorial-real-time-node-react/
或者你可以使用服务器发送事件(在上面的文章中再次描述)。但是我觉得这在大多数情况下比web套接字更有挑战性。如果你不需要发送任何更新到服务器,这也可以工作。
参考:https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events

oxf4rvwz

oxf4rvwz3#

你需要的是:网络套接字

相关问题