我有如下的父组件。这里我想在子组件加载里面设置setLoading函数。
const ReportRechargeDetail = React.memo(() => {
const [selectedDates, setSelectedDates] = useState([]);
const [loading, setLoading] = useState(false);
const [isOpen, setIsOpen] = useState(false);
return (
<>
<Row className="header-wrapper">
<div>
Select date range to proceed : <Space />
<RangePicker
format="YYYY-MM-DD"
onChange={onChange}
disabled={loading}
onOpenChange={onOpenChange}
disabledDate={(currentDate) => currentDate.isAfter(moment())}
/>
</div>
</Row>
{ selectedDates ? (
<Row className="header-wrapper">
<div>
<PrimeButton
buttonName={"Download report"}
onClick={onClickHeaderButton}
/>
</div>
</Row>
) : (<div></div>)
}
<Tabs defaultActiveKey="1" onChange={callback} type="card">
<TabPane tab="IN APP" key="1">
<GenerateReport
columns={columns}
reportType={"recharge-info/in-app"}
reportName={"Recharge Details "}
breadcrumbName={"RECHARGED_DETAILED_REPORT"}
fileDownloadUrl={""}
selectedDateRange={selectedDates}
isOpen={isOpen}
isLoadingCallBack={setLoading}
/>
</TabPane>
<TabPane tab="BALANCE" key="2">
<GenerateReport
columns={columns}
reportType={"recharge-info/online"}
reportName={"Recharge Details "}
breadcrumbName={"RECHARGED_DETAILED_REPORT"}
fileDownloadUrl={"Recharge"}
selectedDateRange={selectedDates}
isOpen={isOpen}
/>
</TabPane>
</Tabs>
</>
);
});
export default ReportRechargeDetail;
子组件如下。但我收到一个错误,错误:无效的挂钩调用。钩子只能在函数组件的主体内部调用。这可能由于以下原因之一而发生:
- 你可能有不匹配的 React 版本和渲染器(例如 React DOM)
- 您可能违反了 Hooks 规则
- 你可能在同一个应用程序中拥有多个 React 副本
const GenerateReport = React.memo(
({
columns,
reportType,
reportName,
breadcrumbName,
fileDownloadUrl,
downloadReport,
downloadReportName,
selectedDateRange,
isOpen,
isLoadingCallBack
}) => {
const [show, setShow] = useState(false);
//const [isOpen, setIsOpen] = useState(false);
const [pageNumber, setPageNumber] = useState(1);
const [pageSize, setPageSize] = useState(10);
const [selectedDates, setSelectedDates] = useState(selectedDateRange);
const [performedActionList, setPerformedActionList] = useState([]);
const [totalCount, SetTotalCount] = useState(0);
const [loading, setLoading] = useState(false);
const [requiredTotal, setRequiredTotal] = useState(true);
const dispatch = useDispatch();
const getRecurrentData = (dateStrings) => {
isLoadingCallBack(true);
setLoading(true);
setShow(true);
});
};
return (
<>
{show ? (
<Spin spinning={loading}>
<ViewBoxBody
loading={loading}
showPrimaryButton={false}
columns={columns}
filterSearchBar={false}
dataSource={performedActionList}
onPaginationClick={onPaginationClick}
currentPage={pageNumber}
totalDataCount={totalCount}
pageSize={pageSize}
showSizeChanger={true}
onShowSizeChange={(curent, size) => setPageSize(size)}
hideOnSinglePage={false}
showTotal={(total) => {
return `Total ${total} items`;
}}
/>
<ViewBoxFooter
onPaginationClick={onPaginationClick}
currentPage={pageNumber}
totalDataCount={totalCount}
pageSize={pageSize}
showSizeChanger={true}
onShowSizeChange={(curent, size) => setPageSize(size)}
hideOnSinglePage={false}
showTotal={(total) => {
return `Total ${total} items`;
}}
/>
</Spin>
) : (
<div></div>
)}
</>
);
}
);