在官方迁移指南中,他们给出了以下示例,将代码从 JSS( 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>
);
}