在 React + Typescript 中打开边栏时使背景变暗
Make background darker when sidebar is open in React + Typescript
我正在尝试使用 react-pro-sidebar 和 React + Typescript 自定义侧边栏。
侧边栏看起来不错,但是当侧边栏打开时,我无法将屏幕的其他部分颜色变深。
此外,我想将侧边栏 opens/closes 的按钮设为单独的按钮。这种情况下可以吗?
到目前为止,这是我的代码的工作沙箱:https://codesandbox.io/s/sleepy-lichterman-qqpp5?file=/src/App.tsx
与此处放的相同代码:
import * as React from "react";
import { useEffect, useState } from "react";
import { ProSidebar, Menu, MenuItem, SubMenu } from "react-pro-sidebar";
import "react-pro-sidebar/dist/css/styles.css";
export interface SidebarProps {
onChange?: (event: React.MouseEvent, isChecked?: boolean) => void;
isCheckedInitial: boolean;
}
export function Sidebar({ onChange, isCheckedInitial, ...rest }: SidebarProps) {
const [isChecked, setCheckedState] = useState(isCheckedInitial);
useEffect(() => {
setCheckedState(isCheckedInitial);
}, [isCheckedInitial]);
const handleChange = (event: React.MouseEvent) => {
setCheckedState(!isChecked);
onChange && onChange(event, isChecked);
};
return (
<ProSidebar collapsed={isChecked}>
<Menu iconShape="square">
<MenuItem onClick={handleChange}>click </MenuItem>
<SubMenu title="Top 1">
<MenuItem>Sub menu</MenuItem>
<MenuItem>Sub menu</MenuItem>
<MenuItem>Sub menu</MenuItem>
</SubMenu>
<SubMenu title="Top 2">
<MenuItem>Sub menu</MenuItem>
<MenuItem>Sub menu</MenuItem>
<MenuItem>Sub menu</MenuItem>
</SubMenu>
<SubMenu title="Top 3">
<MenuItem>Sub menu</MenuItem>
<MenuItem>Sub menu</MenuItem>
<MenuItem>Sub menu</MenuItem>
</SubMenu>
</Menu>
</ProSidebar>
);
}
export default Sidebar;
您可以为此使用 fixed
定位 div
。我在这里编辑了你的例子:https://codesandbox.io/s/kind-babycat-cg872
我在边栏中添加了一个 button
和一个叠加层 div
:
<button onClick={handleChange}>click me</button>
// <ProSidebar ...
<div
className={`overlay ${!isChecked ? 'visible' : ''}`}
onClick={handleChange}
/>
并添加了一些 css:
button {
position: relative;
z-index: 1;
}
.overlay {
position: fixed;
top: 0;
left: 0;
background-color: rgba(0, 0, 0, 0.5);
opacity: 0;
}
.overlay.visible {
right: 0;
bottom: 0;
opacity: 1;
transition: opacity 0.4s;
}
我正在尝试使用 react-pro-sidebar 和 React + Typescript 自定义侧边栏。 侧边栏看起来不错,但是当侧边栏打开时,我无法将屏幕的其他部分颜色变深。
此外,我想将侧边栏 opens/closes 的按钮设为单独的按钮。这种情况下可以吗?
到目前为止,这是我的代码的工作沙箱:https://codesandbox.io/s/sleepy-lichterman-qqpp5?file=/src/App.tsx
与此处放的相同代码:
import * as React from "react";
import { useEffect, useState } from "react";
import { ProSidebar, Menu, MenuItem, SubMenu } from "react-pro-sidebar";
import "react-pro-sidebar/dist/css/styles.css";
export interface SidebarProps {
onChange?: (event: React.MouseEvent, isChecked?: boolean) => void;
isCheckedInitial: boolean;
}
export function Sidebar({ onChange, isCheckedInitial, ...rest }: SidebarProps) {
const [isChecked, setCheckedState] = useState(isCheckedInitial);
useEffect(() => {
setCheckedState(isCheckedInitial);
}, [isCheckedInitial]);
const handleChange = (event: React.MouseEvent) => {
setCheckedState(!isChecked);
onChange && onChange(event, isChecked);
};
return (
<ProSidebar collapsed={isChecked}>
<Menu iconShape="square">
<MenuItem onClick={handleChange}>click </MenuItem>
<SubMenu title="Top 1">
<MenuItem>Sub menu</MenuItem>
<MenuItem>Sub menu</MenuItem>
<MenuItem>Sub menu</MenuItem>
</SubMenu>
<SubMenu title="Top 2">
<MenuItem>Sub menu</MenuItem>
<MenuItem>Sub menu</MenuItem>
<MenuItem>Sub menu</MenuItem>
</SubMenu>
<SubMenu title="Top 3">
<MenuItem>Sub menu</MenuItem>
<MenuItem>Sub menu</MenuItem>
<MenuItem>Sub menu</MenuItem>
</SubMenu>
</Menu>
</ProSidebar>
);
}
export default Sidebar;
您可以为此使用 fixed
定位 div
。我在这里编辑了你的例子:https://codesandbox.io/s/kind-babycat-cg872
我在边栏中添加了一个 button
和一个叠加层 div
:
<button onClick={handleChange}>click me</button>
// <ProSidebar ...
<div
className={`overlay ${!isChecked ? 'visible' : ''}`}
onClick={handleChange}
/>
并添加了一些 css:
button {
position: relative;
z-index: 1;
}
.overlay {
position: fixed;
top: 0;
left: 0;
background-color: rgba(0, 0, 0, 0.5);
opacity: 0;
}
.overlay.visible {
right: 0;
bottom: 0;
opacity: 1;
transition: opacity 0.4s;
}