我有一个侧边栏和一些主要内容。主要内容占据了屏幕的大部分,而侧边栏应该只占一小部分。我有一个父容器,它是一个flexbox。两个子元素(侧边栏和主内容)都是div元素。
侧边栏默认关闭
问题是:切换侧栏不会像预期的那样扩展侧栏
我检查过的东西:
// main.ts
import styled from 'styled-components';
export const Content = styled.div`
flex: 4;
margin-top: 1em;
margin-bottom: 2em;
height: 100vh;
`;
export const Container = styled.div`
display: flex;
`;
// sidebar/styles.ts
import styled from 'styled-components';
interface RootProps {
isOpen: boolean;
}
export const Root = styled.div<RootProps>`
padding: 1em;
background-color: ${DARK};
flex: ${({ isOpen }: RootProps) => (isOpen ? 1 : 0)};
`;
// sidebar/index.tsx
export const Sidebar: React.FC = () => {
const dispatch = useDispatch();
const isOpen = useSidebar();
const handleOpen = () => dispatch(toggleSidebar());
return (
<Root isOpen={isOpen}>
<Button onClick={handleOpen}>
CLICK ME
</Button>
</Root>
);
};
// Usage
// Sidebar styles mirror what's in the sidebar styled component file
<Container>
<Sidebar />
<Content />
</Container>
预期的结果是,当切换按钮时,侧边栏会膨胀和折叠。没有显示错误消息,侧边栏flex值正在正确更新。
JSFiddle只有超文本标记语言/CSS,但基本上是所需的效果:https://jsfiddle.net/5dLk9ex3/3/
我不确定为什么,但将主内容div设置为minwidth:0
解决了这个问题。更多信息请参见:当窗口变小时,Flex项目不会收缩
代码的问题在reducer范围内的某个地方(您的问题不完整),您的侧边栏在发送操作后不会重新加载。
工作示例:
import React, { useState } from 'react';
import ReactDOM from 'react-dom';
import styled from 'styled-components';
const Container = styled.div`
display: flex;
`;
const First = styled.div`
flex: ${({ isOpen }) => (isOpen ? 1 : 0)};
background-color: red;
height: 20px;
`;
const Second = styled.div`
flex: 4;
background-color: green;
height: 20px;
`;
const DEFAULT_INITIAL = false;
const App = () => {
const [isOpen, setIsOpen] = useState(DEFAULT_INITIAL);
const onClick = () => {
console.log('Toggle Sidebar');
setIsOpen(p => !p);
};
return (
<>
<Container>
<First isOpen={isOpen}>FIRST</First>
<Second>SECOND</Second>
</Container>
<button onClick={onClick}>OpenSider</button>
</>
);
};
请参阅此答案的第一条评论
单击箭头时,购物车项视图需要展开该特定视图并折叠当前展开的其他视图。该产品的项id被传递给父组件,以更新要展开的视图(活动的)。虽然id是在reducer中的expandedItem属性上传递和设置的,但它不会更新到子组件(即使它是作为prop在子组件上传递的)。当在最后重新计算子组件时,expandedViewItem仍然为0,这是它的默认值。有人知道如何让子组件接收更新的expandedIte
我正在开发一个带有样式组件的反应应用程序,我有一个组件“导航”。在这个组件中有更多的组件,如,等。Header例如是这样声明的: 问题是,我在不同的文件中有这个导航组件,对于所有文件,样式都很好,但现在我只想在其中一个文件中更改标题组件的背景色,它位于(?)导航组件。我该怎么做?我知道可以用const NewNav=styled(导航)之类的东西从导航组件更改样式,`但是标题呢? 先谢谢你。
我想安装Primeng7.0.0到我的Angular项目,但首先我需要更新我的JHipster到最后一个版本。 当我将此命令写入terminal时,我得到以下错误
为什么我需要再次使用hmap.put方法? 我的理解是这样的。 假设没有现有的键值对。所以,用 如果我在同一个实例中添加一个字符串,那么hashmap也应该自动更新,对吗?键=>列表对象。如果我添加到列表对象,那么对象引用不应该改变,对吗? 为什么我需要再次使用put方法并这样做?
本文向大家介绍函数式组件有没有生命周期?为什么?相关面试题,主要包含被问及函数式组件有没有生命周期?为什么?时的应答技巧和注意事项,需要的朋友参考一下 没有生命周期 因为他没有继承React.Component 所以也不需要render()
问题内容: 我对此下面的程序有疑问 请参阅下面的程序 我期望的是,一旦运行此程序,我应该将putput视为Best,但是令我惊讶的是输出是Test。 谁能告诉我,为什么会这样? 提前致谢 。 问题答案: 字符串在Java中是不可变的,这意味着您无法更改它们。当您调用replace方法时,您实际上是在创建一个新的String。 您可以执行以下操作: 这是重新分配。