概览
props调整组件样式attrs封装组件属性extend或者styled(Component)实现组件样式继承- 使用
innerRef代替ref ThemeProvider helper实现主题功能keyframes helper实现动画界面injectGlobal设置全局样式
基础用法
importReact,{Component}from'react';importstyledfrom'styled-components';constTitle=styled.h1` font-size: 18px; text-align: center; color: palevioletred;`constWrapper=styled.div` padding: 24px;`exportdefaultclassStyledComponentsextendsComponent{render(){return(<Wrapper><Title>This is my first styled-component!</Title></Wrapper>)}}props调整组件样式
importReact,{Component}from'react';importstyledfrom'styled-components';constButton=styled.button` background: ${props=>props.primary ? 'palevioletred' : 'white'}; color: ${props=>props.primary ? 'white' : 'palevioletred'}; font-size: 1em; margin: 1em; padding: 0.25em 1em; border: 2px solid palevioletred; border-radius: 3px;`exportdefaultclassStyledComponentsextendsComponent{render(){return(<Wrapper><Button>Normal</Button><Buttonprimary>Primary</Button></Wrapper>)}}attrs封装组件属性
importReact,{Component}from'react';importstyledfrom'styled-components';constPassword=styled.input.attrs({// define static propstype: 'password',// define dynamic onesmargin: props=>props.size||'1em',padding: props=>props.size||'1em'})` color: palevioletred; font-size: 1em; border: 2px solid palevioletred; border-radius: 3px; margin: ${props=>props.margin}; padding: ${props=>props.padding};`exportdefaultclassStyledComponentsextendsComponent{render(){return(<Wrapper><Passwordplaceholder="A small text input"size="1em"/><Passwordplaceholder="A bigger text input"size="2em"/></Wrapper>)}}extend或者styled(Component)实现组件样式继承
importReact,{Component}from'react';importstyledfrom'styled-components';constButton=styled.button` background: ${props=>props.primary ? 'palevioletred' : 'white'}; color: ${props=>props.primary ? 'white' : 'palevioletred'}; font-size: 1em; margin: 1em; padding: 0.25em 1em; border: 2px solid palevioletred; border-radius: 3px;`// extending styles// way 1constTomatoButton=Button.extend` color: tomato; border-color: tomato;`// way 2 better wayconstAnotherTomatoButton=styled(Button)`color: tomato;border-color: tomato;`exportdefaultclassStyledComponentsextendsComponent{render(){return(<Wrapper><Button>Normal</Button><TomatoButton>TomatoButton</TomatoButton><AnotherTomatoButton>AnotherTomatoButton</AnotherTomatoButton></Wrapper>)}}使用innerRef代替ref
importReact,{Component}from'react';importstyledfrom'styled-components';constInnerRefInput=styled.input` padding: 0.5em; margin: 0.5em; color: palevioletred; background: papayawhip; border: none; border-radius: 3px;`exportdefaultclassStyledComponentsextendsComponent{render(){return(<Wrapper><InnerRefInputplaceholder="hover here"innerRef={x=>{this.input=x}}onMouseEnter={()=>this.input.focus()}/></Wrapper>)}}ThemeProvider helper实现主题功能
importReact,{Component}from'react';importstyled,{ThemeProvider}from'styled-components';constThemeButton=styled.button` font-size: 1em; margin: 1em; padding: 0.25em 1em; border-radius: 3px; color: ${props=>props.theme.main}; border: 2px solid ${props=>props.theme.main};`ThemeButton.defaultProps={theme: {main: 'palevioletred'}}consttheme={main: 'mediumseagreen'}exportdefaultclassStyledComponentsextendsComponent{render(){return(<Wrapper><ThemeButton>Normal</ThemeButton><ThemeProvidertheme={theme}><div><ThemeButton>Themed</ThemeButton><br/></div></ThemeProvider></Wrapper>)}}非styled-components组件使用theme(主题)
import{withTheme}from'styled-components'classMyComponentextendsReact.Component{render(){console.log('Current theme: ',this.props.theme);// ...}}exportdefaultwithTheme(MyComponent)keyframes helper实现动画界面
importReact,{Component}from'react';importstyled,{keyframes}from'styled-components';constrotate360=keyframes` from { transform: rotate(0deg); } to { transform: rotate(360deg); }`constRotate=styled.div` padding: 2rem 1rem; font-size: 1.2rem; display: inline-block; animation: ${rotate360} 2s linear infinite;`exportdefaultclassStyledComponentsextendsComponent{render(){return(<Wrapper><Rotate>😊😊😊</Rotate></Wrapper>)}}injectGlobal设置全局样式
import{injectGlobal}from'styled-components';injectGlobal` @font-face { font-family: 'Operator Mono'; src: url('../fonts/Operator-Mono.ttf'); } body { margin: 0; }`;
概览
props调整组件样式attrs封装组件属性extend或者styled(Component)实现组件样式继承innerRef代替refThemeProviderhelper实现主题功能keyframeshelper实现动画界面injectGlobal设置全局样式基础用法
props调整组件样式attrs封装组件属性extend或者styled(Component)实现组件样式继承使用
innerRef代替refThemeProviderhelper实现主题功能非styled-components组件使用theme(主题)
keyframeshelper实现动画界面injectGlobal设置全局样式