我的问题是 - 每当我使用<Tabs>组件时,onChange方法会调用handleTabChange函数。该组件再次被调用并重新渲染后,useEffect也会被调用。这导致我的页面向上滚动。
如何确保handleChange和useEffect不会导致页面向上滚动?
export function VarianceGraph({ variancesGraphData }) {
if (variancesGraphData === undefined) {
return null;
}
const [currentProject, setCurrentProject] = useState('All');
const [currentTab, setCurrentTab] = useState('ABCD');
const projectCodes = prepareProjectCodesForConsumption(variancesGraphData);
let data = {};
function handleProjectChange(event) {
const { value } = event.target;
setCurrentProject(value);
}
function handleTabChange(event, tabValue) {
setCurrentTab(tabValue);
}
data = prepareProjectDataForRechartsConsumption(currentProject, variancesGraphData);
const hideABCD = data.ABCD.length < 1;
const hideBCDF = data['BCDF'].length < 1;
useEffect(() => {
if (hideABCD && hideBCDF) {
setCurrentTab('None');
} else if (hideABCD) {
setCurrentTab('BCDF');
} else if (hideBCDF) {
setCurrentTab('ABCD');
}
});
return (
<Grid container direction="row" justify="flex-start" alignItems="flex-start">
<Grid item xs={12}>
我尝试过 -
我需要在某些函数中使用setCurrentTab
,以免无限渲染。
我尝试使用useLayoutEffect
,但行为相同。
如果需要,我可以进一步编写组件代码。请帮忙。谢谢。