有没有办法在另一个 JSS 样式的组件中定位嵌套的 JSS 样式的组件? [JSS-nested/Styled-JSS/Material UI (React)]

Posted

技术标签:

【中文标题】有没有办法在另一个 JSS 样式的组件中定位嵌套的 JSS 样式的组件? [JSS-nested/Styled-JSS/Material UI (React)]【英文标题】:Is there a way to target a nested JSS styled component within another JSS styled component? [JSS-nested/Styled-JSS/Material UI (React)] 【发布时间】:2021-05-09 08:11:52 【问题描述】:

是否可以以样式组件允许的类似方式在另一个样式 JSS 对象中定位样式 JSS 对象?

以下是我所说的样式化组件的示例:

const Child = styled.div`
  color: red;
`;

const Parent = styled.div`
  display: flex;
  $Child:hover 
    color: blue
  
`;

这在 JSS 中可行吗?

仅供参考,我正在使用基于 JSS 的 Material UI v4 样式解决方案。

【问题讨论】:

我可能弄错了,但我认为您不能将反引号与 MUI 的样式 api 一起使用 @Barryman9000 我给出的代码示例不是用 JSS/MUI 的样式化 api 编写的。它使用样式化组件来说明我想用 JSS/MUI 的样式化 api 完成什么。 【参考方案1】:

您可以将您的子组件传递给父组件的样式化 API。

const Child = styled("div")(
  color: '#fff'
);
const Parent = styled(Child)(
  background: '#999'
)

更新

是的,我误会了。我认为您不能仅使用 MUI styled API 来做到这一点?我能得到的最接近的是使用 className 道具(或者您可以在 MUI 组件上使用 classes 道具)

const Parent = styled('div')(
  background: '#999',
  '& .warning': 
    '&:hover': 
      color: 'goldenrod'
    
  ,
  '& .error': 
    '&:hover': 
      color: 'red'
    
  
)

<Parent>
  <Child className="warning">Warning!</Child>
  <Child className="error">Error!</Child>
</Parent>

【讨论】:

感谢您的建议,但我正在寻找一种方法来定位可在“父级”中找到的“子级”嵌套实例。除非我遗漏了什么,否则您给出的示例似乎是创建一个名为“Parent”的“Child”样式版本。【参考方案2】:

JSS 中使用 & 和括号以及括号 [] 来实现:

const Child = styled(div)(
  color: 'red',
);

const Parent = styled(div)(
  display: 'flex',
  [`& $Child:hover`]: 
    color: 'blue'
  
);

【讨论】:

以上是关于有没有办法在另一个 JSS 样式的组件中定位嵌套的 JSS 样式的组件? [JSS-nested/Styled-JSS/Material UI (React)]的主要内容,如果未能解决你的问题,请参考以下文章

如何在另一个样式组件中定位样式组件?

如何使用 JSS 为没有类的输入标签设置样式

React 的样式化组件 vs jss vs 情感

如何在 material-ui 样式/JSS 中选择 id?

如何使用 cssinjs/jss 在 shadow root 中挂载样式

在 css 样式的组件中将按钮放置在另一个项目的顶部