Как обновлять sh данные списка React-Admin каждые X секунд? - PullRequest
0 голосов
/ 24 апреля 2020

В документации кеша упоминается, что я могу добавить прокси к провайдеру данных, чтобы мои ответы кэшировались в течение X секунд, а не обновлять их при каждом изменении страницы. Однако в моем случае использования (приложение для торговли акциями) я хотел бы получать бесплатные данные sh из моего API для просмотра списка каждую 1 секунду. Я ожидал сделать это с помощью описанного выше метода кэширования, но похоже, что если срок действия кэша истекает, пока пользователь находится на странице, страница не будет автоматически обновлять sh.

Как я могу получить мой список React-Admin для обновления sh каждые X секунд или автоматически по истечении срока действия кэша?

1 Ответ

1 голос
/ 24 апреля 2020

Чтобы периодически обновлять представление списка, вы можете использовать: useRefresh() от React-Admin и 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>
      )
    }    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...