Javascript 设置在React生命周期方法内获取数据的时间间隔

Javascript 设置在React生命周期方法内获取数据的时间间隔,javascript,reactjs,restapi,Javascript,Reactjs,Restapi,我正在构建一个react应用程序,用于在rest-api中显示数据。为此,我使用了componentDidMount方法,并成功地获得了数据,没有任何混淆。我的代码片段如下所示 componentDidMount() { fetch('http://localhost:5000/sensors') .then(res => res.json()) .then(json => { this.setSta

我正在构建一个react应用程序,用于在rest-api中显示数据。为此,我使用了componentDidMount方法,并成功地获得了数据,没有任何混淆。我的代码片段如下所示

  componentDidMount() {
        fetch('http://localhost:5000/sensors')
          .then(res => res.json())
          .then(json => {
            this.setState({
              isLoaded: true,
              sensors: json,
            })
            console.log(this.state.sensors);
          });

  }

我的要求是每40秒获取一次数据,并在不刷新网页的情况下更新表。有人能帮我整理一下吗?

根据我的要求,因为我需要在40秒的时间间隔内加载表数据,所以我可以使用Javascript内置方法setInterval()insidecomponentWillMount()方法。 如问题所示,渲染()之后的初始数据加载可以通过组件didmount()完成

下面是我在40秒时间间隔内获取数据的代码

 componentWillMount(){
     setInterval(() => {
      fetch('http://localhost:5000/sensors')
      .then(res => res.json())
      .then(json => {
        this.setState({
          isLoaded: true,
          sensors: json,
        })
        console.log(this.state.sensors);
      });
     }, 40000);
   }

根据我的要求,因为我需要以40秒的时间间隔加载表数据,所以我可以使用Javascript内置方法setInterval()insidecomponentWillMount()方法。 如问题所示,渲染()之后的初始数据加载可以通过组件didmount()完成

下面是我在40秒时间间隔内获取数据的代码

 componentWillMount(){
     setInterval(() => {
      fetch('http://localhost:5000/sensors')
      .then(res => res.json())
      .then(json => {
        this.setState({
          isLoaded: true,
          sensors: json,
        })
        console.log(this.state.sensors);
      });
     }, 40000);
   }

据我所知,我认为在不重新渲染组件(不改变状态)的情况下更新状态是不可能的,因为react使用浅层渲染,它基本上检查以前和当前状态,如果它们不匹配,则重新渲染,如果您要求我,在没有内存泄漏和大量错误的情况下执行,您可以

a) 使用一个单独的组件进行抓取和显示结果(如您所说的表),以便只重新加载该组件(并使用redux或contextAPI,任意选择), 此外,您还可以在用户呈现另一个页面时使用componentWillUnmount(不推荐使用)来清除间隔。(也可以使用钩子和返回函数来清除间隔)


b) 变异状态这不是一个好主意(这会导致更多的bug和错误)

据我所知,我认为在不重新渲染组件(不改变状态)的情况下更新状态是不可能的,因为react使用浅层渲染,它基本上会检查以前和当前的状态,如果它们不匹配,则会重新渲染,要做到这一点而不出现内存泄漏和大量bug,您可以

a) 使用一个单独的组件进行抓取和显示结果(如您所说的表),以便只重新加载该组件(并使用redux或contextAPI,任意选择), 此外,您还可以在用户呈现另一个页面时使用componentWillUnmount(不推荐使用)来清除间隔。(也可以使用钩子和返回函数来清除间隔)


b) 变异状态这不是一个好主意(它会导致更多的bug和错误)

它必须是类组件吗?为函数组件编写更容易您可以使用setInterval,但请确保在组件卸载时清除Interval。它必须是类组件吗?为函数组件编写更容易您可以使用setInterval,但请确保在组件卸载时清除Interval。