Я использую условный рендеринг, чтобы показать spinner
во время первого вызова API. И когда date
изменяется, как видно в массиве зависимостей useEffect
, он снова вызывает API-интерфейс
Вопрос:
Если выборка данных не завершена, старые данные отображаются на экране. Но я хочу, чтобы spinner
показывал поверх старых данных, чтобы пользователь мог чувствовать, что идет загрузка данных.
Текущая реализация, то есть условный рендеринг, показывает только один компонент: либо spinner
, либо Grid
.
Spinner

Сетка компонента 
import React, { Component, useState, useEffect } from "react";
import { connect } from "react-redux";
import ApiHelper from "../../api/ApiHelper";
import ReactDataGrid from "react-data-grid";
import { Toolbar, Data, Filters } from "react-data-grid-addons";
import JarvisSpinner from "../presentationalComponents/JarvisSpinner";
import { withRouter } from "react-router-dom";
import "../../css/styles.css";
import "../../css/JarvisGrid.css";
const JarvisGrid = (props) => {
const [pagesize, setPageSize] = useState(15);
const [data, setdata] = useState([]);
const [filters, setFilters] = useState({
filterfield: "Application Send",
filtervalue: "Base",
});
const [sort, setSort] = useState({
Field: "PublicOrderNumber",
Direction: "desc",
});
const [loading, setloading] = useState(true);
useEffect(() => {
//Set data
ReloadData();
}, [props.uid, props.CalendarDates.fromDate, props.CalendarDates.toDate]);
// For Loading Data using API
const ReloadData = () => {
ApiHelper.GetGridQueryResult(
props.uid,
props.filterField,
props.filterValue,
props.CalendarDates.fromDate,
props.CalendarDates.toDate
)
.then((response) => {
setdata(response.data.responses);
setloading(!loading);
})
.catch((error) => {
setdata([]);
switch (error.response.status) {
case 403:
console.log("Error code --> " + 403);
props.history.push("/unAuthorizedPage");
break;
default:
console.log("Error String --->" + error);
}
});
};
return (
<>
{loading ? (
<JarvisSpinner size="3x" />
) : (
<div className="JarvisGrid">
<ReactDataGrid
columns={props.columns}
rowGetter={(i) => data[i]}
rowsCount={data.length}
minHeight={500}
uid={props.uid}
enableRowSelect={null}
enableCellSelect
toolbar={<Toolbar enableFilter="true" />}
onAddFilter={(filter) => {
setFilters({
filterfield: filter.column.key,
filtervalue: filter.filterTerm,
});
}}
onClearFilters={() =>
setFilters({
filterfield: "OrderType",
filtervalue: "Base",
})
}
onGridSort={(sortColumn, sortDirection) => {
setSort({ Field: sortColumn, Direction: sortDirection });
}}
/>
</div>
)}
</>
);
};
function mapStateToProps(state) {
return {
CalendarDates: state.calendarDates,
};
}
export default withRouter(connect(mapStateToProps)(JarvisGrid));
Обратите внимание, что я использую redux
для управления состоянием и react-router
.
================= =============================== После реализации решения, предоставленного MwamiTovi Теперь мне нужно выяснить, что такое наложение.
