gpt4 book ai didi

javascript - 在选项卡之间切换时避免在 React 中重新渲染

转载 作者:行者123 更新时间:2023-12-03 13:43:17 25 4
gpt4 key购买 nike

我有一个使用 Material-ui 来创建选项卡的 React 应用程序。

<div className={classes.root}>
<AppBar position="static">
<Tabs value={value} onChange={handleChange}>
<Tab label="Item One" />
<Tab label="Item Two" />
<Tab label="Item Three" />
</Tabs>
</AppBar>
{value === 0 && <TabContainer id={1}>Item One</TabContainer>}
{value === 1 && <TabContainer id={2}>Item Two</TabContainer>}
{value === 2 && <TabContainer id={3}>Item Three</TabContainer>}
</div>

Edit Material-UI Tabs

TabContainer 是一个功能组件,会进行一些繁重的计算。
是否可以防止 TabContainer 在选项卡之间切换时重新渲染?

更新:
查看我的answer使用 React 功能组件和 css 类的解决方案。

最佳答案

更新/部分解决方案:
通过下面的代码(基于 Rahul Jain's answer )使用 css 类来显示事件 TabContainer,记忆化的函数似乎真的被记忆化了。

    const useTabContainerStyles = makeStyles((theme: Theme) =>  createStyles({
root: {
padding: 8 * 3
},
tabcontainerInActive: {
display: "none"
}
})
);

function TabContainer(props: TabContainerProps) {
const styles = useTabContainerStyles({});
console.log("In TabContainer");
const doubleValue = useMemo(() => double(props.id), [props.id]);
return (
<Typography
id={props.id.toString()}
component="div"
className={classnames(styles.root, {
[styles.tabcontainerInActive]: !props.active
})}
>
{props.children + " " + doubleValue}
</Typography>
);
}

export default function SimpleTabs() {
const classes = useStyles({});
const [selectedTab, setSelectedTab] = React.useState(0);

function handleChange(event: React.ChangeEvent<{}>, newValue: number) {
setSelectedTab(newValue);
}

return (
<div className={classes.root}>
<AppBar position="static">
<Tabs value={selectedTab} onChange={handleChange}>
<Tab label="Item One" />
<Tab label="Item Two" />
<Tab label="Item Three" />
</Tabs>
</AppBar>
{/* */}
<TabContainer id={0} active={selectedTab === 0}>
Item One
</TabContainer>
<TabContainer id={1} active={selectedTab === 1}>
Item Two
</TabContainer>
<TabContainer id={2} active={selectedTab === 2}>
Item Three
</TabContainer>
</div>
);
}

关于javascript - 在选项卡之间切换时避免在 React 中重新渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59798377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com