Хитрость заключается в том, чтобы загрузить изображение, пока пользовательский агент все еще подключен к Интернету.Изображение не будет загружено, пока вы не отобразите тег <img>
.Затем кэшированное изображение может быть отображено без проблем позже.
Я написал короткий create-react-app
пример для иллюстрации.
import React, { useState, useEffect, useCallback } from 'react';
const App = () => {
const [online, setOnline] = useState(true);
const onlineListener = useCallback(() => setOnline(true), [setOnline]);
const offlineListener = useCallback(() => setOnline(false), [setOnline]);
useEffect(() => {
window.addEventListener('online', onlineListener);
window.addEventListener('offline', offlineListener);
return () => {
window.removeEventListener('online', onlineListener);
window.removeEventListener('offline', offlineListener);
};
}, [onlineListener, offlineListener]);
return (
<div className="App">
<img
style={online ? { display: 'none' } : undefined}
src="TODO"
alt="no internet"
/>
</div>
);
};
export default App;
Он отображает изображение, когда пользовательский агент теряет соединение, и скрывает его.снова, когда соединение восстановлено.Очевидно, что оно не будет работать, если соединение будет разорвано с самого начала, но как в таком случае пользователь загрузил ваше приложение?