大佬教程收集整理的这篇文章主要介绍了迁移到 Material-UI v5 时,如何处理条件类?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在 official migration guide 中,他们给出了以下示例,将代码从 JsS (@H_58_3@makeStyles) 更改为新的 styled
模式。
之前:
const useStyles = makeStyles((themE) => ({
BACkground: theme.palette.priMary.main,}));
function Component() {
const classes = useStyles();
return <div classname={Classes.root} />
}
之后:
const MyComponent = styled('div')(({ theme }) =>
({ BACkground: theme.palette.priMary.main }));
function App(props) {
return (
<themeProvIDer theme={themE}>
<MyComponent {...props} />
</themeProvIDer>
);
}
这对单个类来说没问题,但是当代码有条件类时怎么办?
例如
<main classname={Classnames(content,open ? contentopen : contentClosed)}>
{/* content goes here */}
</main>
这里,content
、contentopen
和 contentClosed
是从 useStyles
返回的类,但 contentopen
和 contentClosed
是基于open
的值。
使用新的 styled
方法,我们生成组件而不是生成类名。有没有办法优雅地复制渲染而不诉诸于三元表达式中的内容重复?
例如我们不想做这样的事情:
function App(props) {
return (
<themeProvIDer theme={themE}>
{open
? <MyOpenComponent {...props}>{/* content */}</MyOpenComponent>
: <MyClosedComponent {...props}>{/* content */}</MyClosedComponent>
</themeProvIDer>
);
}
有很多可能的方法来解决这个问题。使用 styled
的一种方法是利用 props 来实现动态样式,而不是尝试使用多个类。
这是一个例子:
import React from "react";
import Button from "@material-ui/core/Button";
import { styled } from "@material-ui/core/styles";
const StyledDiv = styled("div")(({ open,theme }) => {
const color = open
? theme.palette.priMary.contrastText
: theme.palette.secondary.contrastText;
return {
BACkgroundColor: open
? theme.palette.priMary.main
: theme.palette.secondary.main,color,padding: theme.spacing(0,1),"& button": {
color
}
};
});
export default function App() {
const [open,setOpen] = React.useState(false);
return (
<StyledDiv open={open}>
<h1>{open ? "Open" : "Closed"}</h1>
<Button onClick={() => setOpen(!open)}>Toggle</Button>
</StyledDiv>
);
}
其他一些可能的方法:
以上是大佬教程为你收集整理的迁移到 Material-UI v5 时,如何处理条件类?全部内容,希望文章能够帮你解决迁移到 Material-UI v5 时,如何处理条件类?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。