Мне нужно выполнить несколько запросов на выборку. Основываясь на моем первом запросе, который я сделал, чтобы сделать несколько других запросов после получения всего, я должен иметь возможность назначить данные состоянию реагирующего компонента. Похоже, что я присваиваю значения состоянию компонента до того, как метод выборки завершен, и, следовательно, они выглядят как пустой массив.
Я попытался удалить метод внутренней выборки снаружи и выполнить запрос.
import React, { Component } from 'react';
import './App.css';
import Sensors from './iot/Sensors';
class App extends Component {
constructor (props) {
super (props);
this.state = {
status: 'disconnected',
devices: [],
dataPoints: []
};
}
componentDidMount() {
// Get Zigbee devices
fetch('http://localhost:3000/ssapi/zb/dev')
.then((res) => res.json())
.then((data) => {
this.setState({
devices : data
})
data.map((device) => {
const dataPoint = []
JSON.parse(device.metadata).dataGroups.map((datagroup) =>{
const url = 'http://localhost:3000/ssapi/zb/dev/' + device.id + '/ldev/' + datagroup.ldevKey + '/data/' + datagroup.dpKey;
fetch(url)
.then((res) => res.json())
.then((data) =>{
dataPoint.concat(data)
console.log('Data', data);
console.log('Inside dataPoint', dataPoint);
})
.catch((error) => console.log(error));
}) // dataGroups.map
console.log("Final dataPoint", dataPoint);
const dataPoints = this.state.dataPoints.concat(dataPoint);
this.setState({ dataPoints });
}) // data.map
}) // fetch
.catch((error) => console.log(error));
}
render() {
console.log('Render Devices', this.state.devices);
console.log('Render dataPoints', this.state.dataPoints);
}][1]][1]
Я ожидаю, что конечные состояния компонентов будут выглядеть следующим образом
или в функции рендеринга - логирование консоли должно выглядеть следующим образом.
devices = [{},{},{},{},{}...]
dataPoints = [[{},{},{},..], [{},{},{},..], [{},{},{},..], ....]