Material-UI Box component允许我们引用其他组件,如下所示:
import Button from "@material-ui/core/Button";
import Box from "@material-ui/core/Box";
const NewButton = ({ children }) => (
<Box compoment={Button} px={3} py={1} color="white" bgcolor="primary.dark">
{children}
</Box>
)
这就像我想要的那样工作。但是,现在让我用Drawer组件尝试一下:
import Drawer from "@material-ui/core/Drawer";
import Box from "@material-ui/core/Box";
const NewDrawer = ({ children, open }) => {
return (
<Box component={Drawer} width="300px" bgcolor="secondary.dark">
{children}
</Box>
)
}
这不有效。
有人知道为什么不这样做以及如何使它工作吗?
谢谢。
答案 0 :(得分:1)
根据Material UI文档,对于Drawer组件,我们必须将open
道具传递为true
。
还需要像下面那样传递抽屉内容,
<Drawer open={true}>{renderContents()}</Drawer>
在Box组件api中,我们可以将组件数据作为“函数”传递。像下面的例子一样。
import Drawer from "@material-ui/core/Drawer";
import Box from "@material-ui/core/Box";
const NewDrawer = ({ children, open }) => {
return (
<Box component={() => {
return <Drawer open={true}>{renderContents()}</Drawer>
}} width="300px" bgcolor="secondary.dark">
{children}
</Box>
)
}
请参阅我的code sandbox示例。
答案 1 :(得分:0)
在将Drawer
与temporary
变体一起使用时(默认),className
道具将获得applied to the Modal,这不是您要设置样式的元素。 / p>
相反,您想将样式Box
应用于Paper element within the Drawer。您可以对Box子项使用render props approach来完成此操作,如下面的示例所示。
import React from "react";
import Drawer from "@material-ui/core/Drawer";
import Box from "@material-ui/core/Box";
import Button from "@material-ui/core/Button";
const BoxDrawer = explicitProps => {
return (
<Box width="300px" bgcolor="secondary.dark">
{({ className }) => (
<Drawer {...explicitProps} PaperProps={{ className: className }} />
)}
</Box>
);
};
export default function App() {
const [open, setOpen] = React.useState(false);
return (
<div className="App">
<Button variant="contained" onClick={() => setOpen(!open)}>
Open Drawer
</Button>
<BoxDrawer open={open} onClose={() => setOpen(false)}>
<div style={{ textAlign: "center" }}>
<h1>Hello CodeSandbox</h1>
<Button variant="contained" onClick={() => setOpen(!open)}>
Close Drawer
</Button>
</div>
</BoxDrawer>
</div>
);
}