Dans un projet React.js, j'obtiens des svgs dans la méthode componentWillMount()
lifecycle via une fonction appelée loadAllAssets()
. Ceux-ci sont ensuite sauvegardés dans le localStorage de l'utilisateur.Réagir: attendre que tous les actifs soient chargés
(1) Existe-t-il un moyen plus élégant de vérifier si tous les fichiers svg demandés ont bien été sauvegardés dans localStorage autre que d'itérer sur le nombre de requêtes effectuées et de les comparer au contenu de localStorage?
(2) Existe-t-il une meilleure façon d'empêcher l'initialisation de componentDidMount tant que les ressources continuent de se charger, à part d'encapsuler tout le code dans un conditionnel? J'utilise Redux pour que cela me vienne à l'esprit, mais il me semble que j'utilise un marteau pour casser un écrou.
index.js
import { loadAllAssets } from './utils/loadAllAssets';
class AppContainer extends React.Component {
componentWillMount() {
loadAllAssets();
}
//...
}
ReactDOM.render(<Provider store={store} ><AppContainer /></Provider>,
document.getElementById('root'));
loadAllAssets.js
import { ajaxSVG } from './gfAssetsLoader';
export const loadAllAssets =() => {
/* write to localStorage */
ajaxSVG('closeScene', '/assets/svg/close-scene-ani.svg');
//...
}
gfAssetsLoader.js
export const ajaxSVG = (assetName, path) => {
try {
let request = new XMLHttpRequest();
request.open("GET", path, true);
request.onload = function (e) {
if(request.status >= 200 && request.status < 400) {
let data = request.responseText;
localStorage.setItem(assetName, data);
} else console.log('Bad request. request status: ' + request.status);
}
request.send();
}
catch (e) {
console.log(e);
}
};
les requêtes ajax ne devraient-elles pas être effectuées dans componentDidMount? –
pourquoi ne pas utiliser des promesses? Avant de rendre le conteneur de l'application, pourquoi ne pas charger les images svg d'abord, puis seulement après que la chaîne de promesses a été complétée? Rendez-vous l'application – Maru