Javascript React警告:如何在组件中找到错误的setState()调用?

Javascript React警告:如何在组件中找到错误的setState()调用?,javascript,reactjs,Javascript,Reactjs,当我试图设置上下文提供程序的状态时,我在浏览器中收到警告。浏览器控制台中的警告为: Warning: Cannot update a component (`DataContextProvider`) while rendering a different component (`PastLeaveReqUpperLinks`). 我怎么才能找到这个?我认为我需要将useffect()钩子应用于我的set方法,但当我尝试时,它说我不能在回调中使用钩子 下面是我的代码-我认为问题在于模态(用模

当我试图设置上下文提供程序的状态时,我在浏览器中收到警告。浏览器控制台中的警告为:

Warning: Cannot update a component (`DataContextProvider`) while rendering a different component (`PastLeaveReqUpperLinks`). 
我怎么才能找到这个?我认为我需要将useffect()钩子应用于我的set方法,但当我尝试时,它说我不能在回调中使用钩子

下面是我的代码-我认为问题在于模态(用模态开始注释)-特别是设置上下文提供程序状态的setUnderlayShow()和modalOnOff()set函数

import React,{useContext,useffect,useState}来自'React';
从“../../Context/DataContext”导入{DataContext};
从“axios”导入axios;
导入“../styles/leaveRequests.css”;
从“../../img/unitIcons/loader.svg”导入加载程序;
从“../../img/unitIcons/tick.svg”导入勾号;
从“../../img/unitIcons/cross.svg”导入交叉;
从“../../img/modals/close.svg”导入close;
导入“../styles/modals.css”;
常量PastLeaveRequestsUnits=()=>{
常数{
底层展示,
赛特拉伊秀,
莫达尔斯塔特,
莫达洛诺夫,
请求,
}=useContext(DataContext);
//——M O D A L-S T A R T---
//modalOnOff是DataContext中的fct,用于打开/关闭模态
//它是否也用于LeaveReqsPage.js中的参考底图元素
//modal:存储选定的modal单位,用于确定哪些数据
让[selectedUnit,setSelectedUnit]=useState(“”);
让updateSelectedUnit=(项)=>{
设置所选单位(项目);
};
//模态-打开:fct更新模态状态并更新所选单元
常量OpenModel=(项)=>{
更新选定单元(项目);
莫达洛诺夫();
//使用DataContext的参考底图状态
设置参考底图显示(!参考底图显示);
};
//模态-关闭:fct更新模态状态并更新所选单元
const closeModal=(项目)=>{
更新选定单元(项目);
莫达洛诺夫();
设置参考底图显示(!参考底图显示);
};
//--我的名字是L-E N D---
//合并所有休假类型
//映射所有请求并将每个请求存储到新数组中
让allRequests=[];
if(requests.annualLeave){
requests.annualLeave.forEach((项目)=>{
所有请求。推送(项目);
});
}
if(requests.tilRequest){
requests.tilRequest.forEach((项目)=>{
所有请求。推送(项目);
});
}
if(requests.customReq){
requests.customReq.forEach((项目)=>{
所有请求。推送(项目);
});
}
//按startdate对请求数组排序
var sortedRequests=allRequests.sort(函数(a,b){
返回a.start==b.start?0:+(a.start>b.start)| |-1;
});
//映射器:映射到休假单位
const getLeaveUnits=sortedRequests.map((项目)=>{
//测定单位颜色
让UnitColor='';
如果(item.approved==空){
UNITCLOUR=‘单位重新申请’;
}否则如果(item.approved==真){
UNITCLOUR=‘装置重新批准’;
}否则如果(item.approved==false){
UNITCLOUR=‘单位颜色’;
}
//确定状态图标
让statusIcon=loader;
如果(item.approved==空){
状态图标=加载器;
}否则如果(item.approved==真){
状态图标=勾选;
}否则{
状态图标=交叉;
}
//确定休假类型名称
让LeveTypeName='';
如果(item.type=='annualLeave'){
leaveTypeName=‘年假’;
}else if(item.type=='tilRequest'){
leaveTypeName=‘代替时间’;
}否则{
leaveTypeName=item.type;
}
//convertTimestamp()中使用的圆形fct
const rounder=(num,rounder)=>{
var乘数=1/舍入器;
返回Math.round(num*乘数)/乘数;
};
//转换时间戳
const convertTimestamp=(时间戳,类型)=>{
设天数=时间戳/1000/60/60/24;
//对于应付休假类型
如果(类型=='annualLeave'){
let值=更圆(天,0.5);
设d=天;
如果(值==1){
d=日;
}
如果(值<0.5){
返回“0.5天”;
}否则{
返回`${value}${d}`;
}
//对于til休假类型
}else if(type==='tilRequest'){
让分钟=数学楼层(时间戳/1000/60);
如果(分钟>59){
让小时数=数学楼层(分钟/60);
设模=分钟%(小时*60);
如果(模>0){
返回`${hours}h${module}m`;
}否则{
返回`${hours}h`;
}
}否则{
返回`${mins}mins`;
}
}否则{
设天数=时间戳/1000/60/60/24;
let值=更圆(天,0.5);
设d=天;
如果(值==1){
d=日;
}
如果(值<0.5){
返回“0.5天”;
}否则{
返回`${value}${d}`;
}
}
};
//开始和结束日期格式化程序
常量startEndDate=(开始、结束)=>{
//删除不相关的代码
返回`${startDay}${startMonth}${startYr}${divider}${endDay}${endMonth}${endYr}`;
};
//如果装置比今天旧,则显示
//今天作为时间戳
让今天=Math.round(new Date().getTime());
//如果模式打开,滚动锁定请求容器
//if(modalState){
//$('.innerUnitsContainer').css('溢出','隐藏');
//}其他{
//$('.innerUnitsContainer').css('overflow','auto');
// }
//模态:模板
常量模态=()=>{
让状态=“”;
//需要创建一个函数来返回manager的名称
let manager='Sean Wheldon';
让提交日期=()=>{
let dateObj=新日期(选择单位提交日期);
let day=dateObj.tolocalString('en-US',{day:'numeric'});
设month=dateObj.tolocalString('en-US',{month:'short'});
返回`${day}${month}`;
};
如果(selectedUnit.approved==真){
状态=`Appr