已实现点击披萨图标切换Sidebar功能,为何Sidebar仍被自动渲染?
问题原因
你当前默认isOpen为false时侧边栏依旧显示,核心原因有两种可能:
- 没有通过条件渲染控制SideBar组件是否挂载
sidebar.element.js中定义的SidebarContainer样式没有根据传入的isOpen参数做显隐控制
修复方案
方案1:JSX层面条件渲染(更推荐,默认不挂载侧边栏DOM)
修改Main.js中SideBar组件的渲染逻辑,只有isOpen为true时才渲染组件:
// Main.js 中替换原有的SideBar引入行 {isOpen && <SideBar isOpen={isOpen} toggle={toggle} />}
方案2:修复styled-components样式控制
如果希望保留DOM节点仅用样式控制显隐,检查sidebar.element.js中的SidebarContainer样式是否添加了isOpen的判断逻辑,示例如下:
// sidebar.element.js 中修改SidebarContainer的定义 import styled from 'styled-components' export const SidebarContainer = styled.aside` position: fixed; z-index: 999; width: 350px; height: 100%; background: #ffc500; display: grid; align-items: center; top: 0; transition: 0.3s ease-in-out; /* 核心逻辑:isOpen为false时将侧边栏移出可视区域 */ right: ${props => props.isOpen ? '0' : '-100%'}; @media screen and (max-width: 400px) { width: 100%; } ` 两种方案二选一即可,方案1的性能更好,不会在默认状态下生成多余的侧边栏DOM节点。 内容的提问来源于stack exchange,提问作者Sardar Ahmed Khan
相关产品推荐
相关产品推荐

