如何每X秒刷新一次React-Admin列表数据?

时间:2020-04-24 00:48:33

标签: reactjs react-redux react-admin

cache documentation提到我可以向数据提供者添加代理,以便将响应缓存X秒钟,而不是由React-Admin在每次页面更改时刷新它们。但是,对于我的用例(一个股票交易应用程序),我希望每隔1秒从我的API获取我的listview的新数据。我原本希望通过使用上面的缓存方法来做到这一点,但是看起来如果用户在页面上时缓存过期,页面将不会自动刷新。

如何使我的React-Admin列表视图每X秒刷新一次,或者在缓存过期时自动刷新?

1 个答案:

答案 0 :(得分:1)

要定期更新列表视图,可以使用:来自React-Admin的useRefresh()和来自此处的useRecursiveTimeout()
https://www.aaron-powell.com/posts/2019-09-23-recursive-settimeout-with-react-hooks/

import React, { useEffect, useRef } from 'react';
import { List, useRefresh } from 'react-admin';

function useRecursiveTimeout(callback, delay) { 
      const savedCallback = useRef(callback)

      useEffect(() => {
        savedCallback.current = callback  
      }, [callback])

      useEffect(() => { 
        let id    
        function tick() {
          const ret = savedCallback.current()

          if (ret instanceof Promise) {
            ret.then(() => {
              if (delay !== null) {
                id = setTimeout(tick, delay)
              }
            })
          } else {
            if (delay !== null) {
              id = setTimeout(tick, delay)
            }
          }
        }
        if (delay !== null) {
          id = setTimeout(tick, delay)
          return () => id && clearTimeout(id)
        }
      }, [delay])
    }

    const MyList = (props) => {
      const refresh = useRefresh()
      useRecursiveTimeout(() => refresh(), 1000) 

      return (
        <List>
        ...
        </List>
      )
    }