У меня есть куча данных с метками времени (в миллисекундах), и мне нужно воспроизвести эти данные в браузере на основе таймера, также работающего в браузере.Я использую React
То, что я получил до сих пор, - это то, что я использую вызов API для получения данных с моего сервера SQL, а затем сохраняю эти данные в BTree с меткой времени в качестве ключа.и данные в качестве значения.Прошедшее время является состоянием, а BTrees - тоже состояниями.Я пробовал как BTree, так и Hashmaps, так как изначально думал, что моей проблемой является длительное время поиска в Hashmaps.
В настоящее время это не работает, и я считаю, что это так, потому что мой поиск и поиск недостаточно быстро, даже с BTree.Значение со временем = 0 отображается правильно, но все последующие рендеры не определены, я прикрепил снимок экрана к отладчику консоли ниже.Числа - это время в мс, неопределенное означает, что у меня нет ключей этого значения, я знаю это.Я просто не уверен, как их синхронизировать.
введите описание изображения здесь
У меня большой набор данных, поэтому я не уверен, как поступить.Моя реализация полностью вне базы или я на правильном пути?Есть ли стандартизированный способ сделать это?
Вот соответствующий код, пожалуйста, дайте мне знать, если есть что-то еще, что я должен указать.
startTimer() {
this.setState({
isOn: true,
time: this.state.time,
start: Date.now() - this.state.time
})
this.timer = setInterval(() => this.setState({
time: Date.now() - this.state.start
}), 1);
}
stopTimer() {
this.setState({isOn: false})
clearInterval(this.time)
}
resetTimer() {
this.setState({time: 0, isOn: false})
}
handleSubmit = async e => {
e.preventDefault();
const response = await fetch('/api/world', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ post: this.state.post }),
});
const body = await response.text();
this.setState({ responseToPost: body });
};
render() {
let start = (this.state.time == 0) ?
<button onClick={this.startTimer}>start</button> :
null
let stop = (this.state.time == 0 || !this.state.isOn) ?
null :
<button onClick={this.stopTimer}>stop</button>
let resume = (this.state.time == 0 || this.state.isOn) ?
null :
<button onClick={this.startTimer}>resume</button>
let reset = (this.state.time == 0 || this.state.isOn) ?
null :
<button onClick={this.resetTimer}>reset</button>
//DEBUG HERE
console.log(this.state.time)
console.log()
var data = [{
name: 'beams',
aid: beamID,
bytes: '',
bytes: this.state.beamTree.get(this.state.time)
},{
name: 'cruise',
aid: cruiseID,
bytes: '',
bytes: this.state.cruiseMap.get(this.state.time)
},{
name: 'dash',
aid: dashID,
bytes: '',
bytes: this.state.dashMap.get(this.state.time)
},{
name: 'radio',
aid: radioID,
bytes: '',
bytes: this.state.radioMap.get(this.state.time)
},{
name: 'tc',
aid: tcID,
bytes: '',
bytes: this.state.tcMap.get(this.state.time)
}]
return (
<div className="App">
<div className="Sidebar">
<ReactTable
style={{"minheight" : "100%"}}
showPagination={false}
data={data}
columns={columns}
pageSizeOptions= {[3,9]}
/>
</div>
<div>
<h3>timer: {this.state.time}</h3>
{start}
{resume}
{stop}
{reset}
</div>