在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