我可以在不重新渲染组件的情况下更新 Material-UI 中的样式吗?
Can I update styles in Material-UI without component rerendering?
我有一个 Box 组件。如果 props 为假,我需要隐藏它并显示其中一个是否为真。但是当props为真时,它就被隐藏了。当我切换到 另一个组件 和 return 到那些有框的组件时,它变得可见。
<Box
component={Grid}
display={{
xs: error || activity ? "block" : "none",
sm: error || activity ? "block" : "none",
md: "block",
}}
>
<Component/>
</Box>
我知道,我可以使用条件,一切都会好的。
{ any condition &&
<Box
component={Grid}
display={{
xs: error || activity ? "block" : "none",
sm: error || activity ? "block" : "none",
md: "block",
}}
>
<Component/>
</Box>
}
或者编写 displayStyle 并在样式中使用断点
const displayStyle = error || activity ? "block" : "none",
<Box
component={Grid}
display={displayStyle}
>
<Component/>
</Box>
但是我可以通过更新 MaterialUI
的样式来更改 display
您可以使用 Material-UI 钩子 makeStyles
,看起来像这样:
const useStyles = makeStyles({
root: { display: props => props.error ? 'block' : 'none' },
});
export default function Hook() {
const classes = useStyles();
return <Button className={classes.root}>Hook</Button>;
}
或者你可以用styled-components
,个人觉得比较满意,大概是这样的:
const MyButton = styled(Button)({
display: ${(props) => props.error ? 'block' : 'none' }
});
export default function StyledComponents() {
return <MyButton>Styled Components</MyButton>;
}
我有一个 Box 组件。如果 props 为假,我需要隐藏它并显示其中一个是否为真。但是当props为真时,它就被隐藏了。当我切换到 另一个组件 和 return 到那些有框的组件时,它变得可见。
<Box
component={Grid}
display={{
xs: error || activity ? "block" : "none",
sm: error || activity ? "block" : "none",
md: "block",
}}
>
<Component/>
</Box>
我知道,我可以使用条件,一切都会好的。
{ any condition &&
<Box
component={Grid}
display={{
xs: error || activity ? "block" : "none",
sm: error || activity ? "block" : "none",
md: "block",
}}
>
<Component/>
</Box>
}
或者编写 displayStyle 并在样式中使用断点
const displayStyle = error || activity ? "block" : "none",
<Box
component={Grid}
display={displayStyle}
>
<Component/>
</Box>
但是我可以通过更新 MaterialUI
的样式来更改 display您可以使用 Material-UI 钩子 makeStyles
,看起来像这样:
const useStyles = makeStyles({
root: { display: props => props.error ? 'block' : 'none' },
});
export default function Hook() {
const classes = useStyles();
return <Button className={classes.root}>Hook</Button>;
}
或者你可以用styled-components
,个人觉得比较满意,大概是这样的:
const MyButton = styled(Button)({
display: ${(props) => props.error ? 'block' : 'none' }
});
export default function StyledComponents() {
return <MyButton>Styled Components</MyButton>;
}