【问题标题】:Can I create class-based React Styled Components?我可以创建基于类的 React 样式组件吗?
【发布时间】:2018-12-26 10:27:43
【问题描述】:

我刚开始研究将样式化组件用于 JavaScript React Web 应用程序,我想知道是否可以使用基于类的样式化组件。例如:

功能性(作品):

import styled from 'styled-components';

const Header = styled.header`
    color: blue;
`;

export default Header;

.
.
.

(in another file)
import React, {Component} from 'react';
import Header from './Header';

class App extends Component {
  render() {
    return (
        <Header>
          This is my header.
        </Header>
    );
  }
}

基于类(如果可以完成这样的事情,我会很感兴趣--不起作用...颜色未应用于我的标题):

import React, {Component} from 'react';
import styled from 'styled-components';

class Header extends Component {
    render() {
        return (
            <header>
                Hi there. Test.
            </header>
    )};
}

export default styled(Header)`
  color: blue;
`;

.
.
.

(in another file)
import React, {Component} from 'react';
import Header from './Header';

class App extends Component {
  render() {
    return (
        </Header>
    );
  }
}

这样的事情可能吗?

【问题讨论】:

    标签: reactjs styled-components


    【解决方案1】:

    是的,可以做到,你只需要将 className prop 传递给你希望拥有 styled-component 类的 JSX 元素,实际上你可以传递任何其他 props,因为 styled-components 传递了所有的 props到它的包装组件。

    import React, {Component} from 'react';
    import styled from 'styled-components';
    
        class Header extends Component {
            render() {
                return (
                    <header className={this.props.className}>
                        Hi there here is another prop {this.props.anotherProp}
                    </header>
            )};
        }
    
        export const StyledHeader styled(Header)`
          color: blue;
        `;
    
       // you can pass other props down to Header
       <StyledHeader
         anotherProp='testing!!'/>
    

    您可以在他们的docs 中看到这种模式的示例。希望对您有所帮助!

    【讨论】:

    • 太棒了!谢谢!我阅读了您链接的文档的那部分,但我被抛弃了,因为它是以函数形式编写的(我对 React 还是有点陌生​​)。文档中的this portion 是否适用(第二个示例......带有const StyledA = styled(A)`` 的那个)?不过,我确实对此进行了测试,它似乎可以按我希望的那样工作:)
    • 是的,你可以看到他们在那里使用类组件,传递了 className 属性。另一方面,我没有使用组件插值(我肯定会),但只要您定位样式组件而不是 React 组件,它就可以工作。
    猜你喜欢
    • 1970-01-01
    • 2020-11-04
    • 2017-01-19
    • 2016-12-06
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    相关资源
    最近更新 更多