Я преобразовал свое приложение React в PWA, и оно работает частично нормально.
Я последовал этому руководству: https://medium.com/@toricpope / transform-a-react-app-into-a-прогрессив- web-app-pwa-dea336bd96e6
Однако в этой статье показано только, как кэшировать данные stati c, и мне также нужно хранить данные, полученные с сервера, я мог бы сделать это, следуя инструкциям первый ответ этого сообщения: Как я могу кэшировать данные из API в Cache Storage в React PWA? и вставляя адреса firebase, где данные хранятся, в массив urlsToCache
, заполненный файлами, которые должны быть сохранены в кеше.
Пока все хорошо, однако после того, как данные будут сохранены в кеше, приложение перестает получать данные с сервера и загружает страницу только с данными из кеша, даже если сервер обновлено. Это то, что мне нужно исправить.
Короче говоря, мне нужно получить данные с сервера, сохранить их в кеше, чтобы использовать их, когда приложение отключено, и обновлять кеш каждый раз, когда сервер достигнуто.
Я пытаюсь следовать этому руководству, но безуспешно: https://developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook/#serving -предложения
Это мой рабочий. js файл:
var CACHE_NAME = 'pwa-task-manager';
var urlsToCache = [
'/',
'/completed',
'/index.html',
'/static/js/main.chunk.js',
'/static/js/0.chunk.js',
'/static/js/1.chunk.js',
'/static/js/bundle.js',
'/calculadora',
'https://calc-marmo.firebaseio.com/clientes.json',
'https://calc-marmo.firebaseio.com/adm.json',
];
// Install a service worker
self.addEventListener('install', event => {
// Perform install steps
event.waitUntil(
caches.open(CACHE_NAME)
.then(function(cache) {
console.log('Opened cache');
return cache.addAll(urlsToCache);
})
);
});
// Cache and return requests
self.addEventListener('fetch', event => {
event.respondWith(
caches.match(event.request)
.then(function(response) {
// Cache hit - return response
if (response) {
return response;
}
return fetch(event.request);
}
)
);
});
// Update a service worker
self.addEventListener('activate', event => {
var cacheWhitelist = ['pwa-task-manager'];
event.waitUntil(
caches.keys().then(cacheNames => {
return Promise.all(
cacheNames.map(cacheName => {
if (cacheWhitelist.indexOf(cacheName) === -1) {
return caches.delete(cacheName);
}
})
);
})
);
});
Любая помощь будет принята с благодарностью.