騒々しいstyled-components快速入門
4992 ワード
styled-componentsとは何ですか?
他の前処理に比べてどのような利点がありますか?
どんな問題を解決しましたか。
公式ドキュメント
https://www.styled-components.com/docs
インストール
npm install --save styled-components
エディタのヒント
2018-06-11更新
使用
最も基本的な使用
import styled from 'styled-components'
const Title = styled.h1`
font-size: 1.5em;
text-align: center;
color: palevioletred;
`;
// const Title = styled.h1(xx)
const Wrapper = styled.section`
padding: 4em;
background: papayawhip;
`;
render () {
return (
Hello styled-components
)
}
コンソールにランダムなclassNameが出力されているのが見えます.これはstyled-componentsが完成しました.注意:コンポーネント名は大きく始まる必要があります.そうしないと、通常のラベルに解析されます.
転送props
const Button = 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;
`
render(
);
コンポーネントが渡されるpropsは、コンポーネントを定義するときに入手できます.これにより、いくつかのスタイルコンポーネントのカスタマイズが容易になります.
propsの高度な使い方
デフォルト値を設定し、送信する必要が設定されていない場合はデフォルト値(defaultProps)を与えます.
export default class ALbum extends React.Component {
constructor (props) {
super(props)
this.state = {
//
imgSrc: props.imgSrc
}
}
render () {
const {imgSrc} = this.state
return (
)
}
}
// props
const Container = styled.div`
background-size: cover;
background-image: url(${props => props.imgSrc});
width: 100%;
height: 300px;
`
//
Container.defaultProps = {
imgSrc: Cover
}
アセンブリの作成
これはとても役に立ちます.もともとコンポーネントだったのに、彼のためにスタイルを追加する場合はどうすればいいですか.
// className react-native style
const Link = ({className , children}) => (
{children}
)
const StyledLink = styled(Link)`
color: palevioletred;
`
render(
?
);
コンポーネントスタイルの継承
const Button = styled.button`
color: palevioletred;
font-size: 1em;
margin: 1em;
padding: 0.25em 1em;
border: 2px solid palevioletred;
border-radius: 3px;
`;
const TomatoButton = Button.extend`
color: tomato;
border-color: tomato;
`;
// TomatoButton Button class
コンポーネントラベルの変更
暇な卵が痛い場合は、buttonをaラベルに変えるなど、コンポーネントのラベルを変更したいと思っています.
// Button withComponent
const Link = Button.withComponent('a')
その他の属性の維持
場合によっては、サードパーティ製ライブラリスタイルを使用する必要がある場合があります.この方法で簡単に達成できます.
const Input = styled.input.attrs({
// props
type: 'password',
// 1em
margin: props => props.size || '1em',
padding: props => props.size || '1em'
})`
color: palevioletred;
font-size: 1em;
border: 2px solid palevioletred;
border-radius: 3px;
// props
margin: ${props => props.margin};
padding: ${props => props.padding}
`
render ( )
アニメーション(Animation)
アニメーションは、グローバルを汚染することなくランダムなクラス名を生成します.
import { keyframes } from 'styled-components'
// CSS
const rotate360 = keyframes`
from {
transform: rotate(0);
}
to {
transform: rotate(360deg);
}
`
const Rotate = Button.extend`
animation: ${rotate360} 2s linear infinite;
`
render ( )
締めくくり
styled-componentsは大部分の問題を解決し、メンテナンス性を高めたが、オリジナルの体験を破壊し、ビジネスの要求を達成するためにより多くのコードを書く必要があり、将来より良い案があることを望んでいる.