我正在研究一个ReactJS项目,该项目在很大程度上取决于某些API。
我有一个HTTP服务,所有组件都用于调用API。
我需要添加一个加载器,以便在处理某些HTTP请求时显示该加载器。
目前,我正在使用redux状态来打开和关闭加载程序。由于无法从服务更改Redux状态,因此,当我使用http调用时,当前正在从组件调用加载程序的开/关。
我需要实现的是从服务本身打开/关闭加载程序,因此无论何时使用HTTP服务,我都不必考虑这一点。
我该如何实现?
答案 0 :(得分:1)
如果您想要整个页面加载器,那么您可以管理其外观。您可以直接通过HTTP调用方法显示hide loader。
HttpRequests.js
'use strict';
function isLoaderManage() {
let x = document.getElementById("loader");
if (x.style.display === "none") {
x.style.display = "block";
} else {
x.style.display = "none";
}
}
const request = {
get: (url) => {
return fetch(url)
.then((resp) => {
isLoaderManage();
return resp.json();
})
.then((resp) => {
isLoaderManage();
return resp;
}).catch((err) => {
isLoaderManage();
return err;
});
},
}
export { request };
API.js
'use strict';
import { request } from './HttpRequests';
const API = {
getSongs: (URL) => request.get(URL),
}
export { API };
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<base href="/" />
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>React App</title>
</head>
<body>
<noscript>
You need to enable JavaScript to run this app.
</noscript>
<div id="loader"></div>
<div id="root"></div>
</body>
</html>
index.css
#loader {
position: fixed;
width: 100%;
left: 0;
right: 0;
top: 0;
bottom: 0;
background-color: rgba(255, 255, 255, 0.7);
z-index: 9999;
}
@-webkit-keyframes spin {
from {
-webkit-transform: rotate(0deg);
}
to {
-webkit-transform: rotate(360deg);
}
}
@keyframes spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
#loader::after {
content: "";
display: block;
position: absolute;
left: 48%;
top: 40%;
width: 40px;
height: 40px;
border-style: solid;
border-color: black;
border-top-color: transparent;
border-width: 4px;
border-radius: 50%;
-webkit-animation: spin 0.8s linear infinite;
animation: spin 0.8s linear infinite;
}