如何实时自动刷新数据,反应?

Posted

技术标签:

【中文标题】如何实时自动刷新数据,反应?【英文标题】:How to auto refresh data in real time, react? 【发布时间】:2020-06-16 08:05:33 【问题描述】:

第一次使用 React 制作一个基本的 spotify 应用程序。目前,“正在播放”功能正在使用按钮来显示用户正在播放的内容。如何更改此命令,使其与单击按钮一样实时执行?

<button onClick=() => this.getNowPlaying()>
   Check Now Playing
 </button>

任何帮助都会很棒:) 完整的代码示例如下

import React,  Component  from 'react';
import './App.css';
import Spotify from 'spotify-web-api-js';

const spotifyWebApi = new Spotify();

class App extends Component 
  constructor()
    super();
    const params = this.getHashParams();
    this.state =
      loggedIn: params.access_token ? true : false,
      nowPlaying: 
        name: 'Not Checked',
        image: ''
       
     
    if (params.access_token)
      spotifyWebApi.setAccessToken(params.access_token)
    
  
  getHashParams() 
    var hashParams = ;
    var e, r = /([^&;=]+)=?([^&;]*)/g,
        q = window.location.hash.substring(1);
    while ( e = r.exec(q)) 
       hashParams[e[1]] = decodeURIComponent(e[2]);
    
    return hashParams;
  

  getNowPlaying()
    spotifyWebApi.getMyCurrentPlaybackState()
      .then((response) => 
        this.setState(
          nowPlaying: 
            name: response.item.name,
            image: response.item.album.images[1].url
          
        )
      
    )
  

  render() 
    return (
    <div className="App">
      <a href='http://localhost:8888'>
      <button>Login But With Spotify </button>
      </a>
      <div> Now Playing:  this.state.nowPlaying.name </div>
    <div>
    <img src= this.state.nowPlaying.image style= width: 100/>
    </div>
    <button onClick=() => this.getNowPlaying()>
      Check Now Playing
    </button>
    </div>

【问题讨论】:

【参考方案1】:

不确定您所说的“实时”到底是什么意思,但您可以设置一个间隔来使用 api 检查正在播放的歌曲。

类似:

class App extends Component 
//your code ..

this.interval;

componentDidMount() 
  this.interval = setInterval(this.getNowPlaying, 500); // <- time in ms


stopInterval() 
  clearInterval(this.interval);


componentWillUnmount() 
  this.stopInterval();


【讨论】:

【参考方案2】:

你可以添加

componentDidMount()
   this.interval = setInterval(() => 
      // Spotify API for getting current 
      // setState if the song has changed
   , 500);

componentWillUnmount() 
    clearInterval(this.interval);
  

我个人不是这种方法的忠实拥护者。但这是一个开始。

【讨论】:

以上是关于如何实时自动刷新数据,反应?的主要内容,如果未能解决你的问题,请参考以下文章

Nacos配置自动刷新不生效

VBA自动刷新数据透视表

自动刷新 IFrame HTML

如何在 c# mvc 中自动刷新 jqgrid

php 如何避免刷新页面重复插入数据到数据库

vue实现数据实时刷新