【发布时间】:2021-12-31 13:50:27
【问题描述】:
我正在尝试根据某些状态在 React 中隐藏/显示组件。我面临的主要问题是在隐藏和显示期间保持组件的内部状态。下面是执行我期望的代码并维护每个组件(非洲、欧洲、美洲、亚洲)的状态:
render() {
const {selectedTab} = this.state;
return (
<div>
<div className={selectedTab === 'africa' ? '' : 'hidden-tab'}><Africa /></div>
<div className={selectedTab === 'europe' ? '' : 'hidden-tab'}><Europe /></div>
<div className={selectedTab === 'america' ? '' : 'hidden-tab'}><America /></div>
<div className={selectedTab === 'asia' ? '' : 'hidden-tab'}><Asia /></div>
</div>
)
}
//regions.scss
.hidden-tab {
display: none
}
但是,我对上述代码的简洁性不满意,并想重构,这是我面临的问题。这就是我所做的:
render() {
const {selectedTab} = this.state;
const tabToRegionMap = {
'africa': <Africa />,
'eruope': <Europe />,
'america': <America />,
'asia': <Asia />
};
const {[selectedTab]: selectedRegion, ...regionsToHide} = tabToRegionMap;
return (
<div>
<div className={'hidden-tab'}>
{Object.values(regionsToHide)}
</div>
{selectedRegion}
</div>
);
上述尝试确实显示/隐藏了组件,但在隐藏/显示期间不保持组件的内部状态 - 似乎每次都在卸载和重新安装它们。
谁能帮我解决问题或提出更好的解决方法?那将不胜感激。
PS 我不希望将状态移动到父级或 Redux,因为这涉及到很多样板,并且各个组件的状态非常复杂。
【问题讨论】:
标签: javascript reactjs ecmascript-6 react-state-management