【问题标题】:Contextual styling of ReactJS styled-componentsReactJS 样式组件的上下文样式
【发布时间】:2017-08-25 15:35:02
【问题描述】:

我在使用样式化组件时遇到了问题,我不确定这是否是技术限制,或者我使用它们的心理模型是否错误。

在这个例子中(我只是在 Codepen 中快速编写,所以忽略拼写错误)我有一个组件是跨度中的用户名。我希望能够在任何地方使用该组件,因此它的样式非常简单:

// From User.js    
import React from 'react';
import styled from 'styled-components';

const Username = styled.span`
  color: black;
`

const User = () => (
  <UserName>bla</Username>
);

export default User;

我希望能够在不同的组件中使用此跨度,但在这种情况下,我希望它的样式在此上下文中被覆盖:

// From Userblock.js
import React from 'react';
import styled from 'styled-components';
import User from './user';

const UserWrapper = styled.div`
  // Some styles
`

const User = styled(User)`
  color: red; // Different color when displayed in a UserBlock
`

const UserBlock = () => (
  <UserWrapper>
    <User />
  </UserWrapper>
);

export default UserBlock;

据我所知,这是在第三方组件上设置样式的方法(并且可以在我的应用程序的其他地方使用),据我所知,它应该可以工作,但我什么也没得到。

另外,回到心智模型问题 - 当您使用样式化组件时,您应该这样做吗?

感谢您的帮助!

【问题讨论】:

    标签: css reactjs styled-components


    【解决方案1】:

    当你用styled(X) 包装一个普通的 React 组件时,你需要确保附加styled-components 传入的类。

    这意味着对于您的示例,这将解决问题:

    const User = (props) => (
      <UserName className={props.className}>bla</Username>
    );
    

    当您覆盖现有组件styled-components 的样式时,会继续生成一个类,将其注入并将其传递给组件。这意味着如果你不将类附加到任何东西上,你将永远看不到样式! (更多信息请参见the documentation)

    【讨论】:

    猜你喜欢
    • 2019-01-07
    • 2018-11-20
    • 2017-07-04
    • 2018-05-10
    • 2020-01-21
    • 1970-01-01
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多