在React.js项目中,我通过名为loadAllAssets()
的函数在componentWillMount()
生命周期方法中获取svgs。然后这些保存在用户的localStorage内部。反应:等到所有资产加载后
(1)是否有一种更优雅的方式来检查是否所有请求的svg文件都确实保存在localStorage中,而不是迭代所做的请求数并将它们与localStorage的内容进行比较?
(2)有没有更好的方法来阻止componentDidMount的初始化,只要资源仍在加载,而不是将整个代码包装在条件中?我正在使用Redux,所以也会想到,但在我看来,像使用大锤来破解坚果。
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);
}
};
不应该在componentDidMount中完成ajax请求吗? –
为什么不使用承诺?在渲染应用程序容器之前,为什么不先装载svg图像,然后才能在promise链完成之后才能实际渲染应用程序 – Maru