我想从我的本地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>
)
}
}
}
3条答案
按热度按时间4dc9hkyq1#
您需要实现套接字。在进行更改时从后端触发事件,并在前端侦听这些更改。在接收到事件时,在前端进行所需的更改
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
oxf4rvwz3#
你需要的是:网络套接字