[React] Styled-components
React.jsスタイルを適用する最適なスタイルコンポーネントライブラリと呼ばれるライブラリについて説明します.
styled-componsesは何ができますか?
たとえば、
どこで使いますか.
Kidhub、グーグル、Spotify、Tinderなど、多くの大手企業がこのライブラリを使用しています.こんな大きな会社で使うのは理由があると思うので、今回はしっかり勉強しておけばいいと思います.
既存の反応からスタイルを適用 htmlドキュメントを処理するように、 はcssファイルをインポートします.は、 である.ファイル用cssモジュールを作成し、重複しないようにする1番 上記の3つの方法(
また、コンポーネントを作成するときに上記の3つの方法で記述される場合、cssを表示するために不要なコードが追加されます.各コンポーネントは、cssを表示することなく
すなわち,タグの内部クラス名(例えば
styled-コンポーネントの適用
npm i styled-components
次に、トップ
また、作成した
BoxOneとBoxTwo冗長
以上、BoxOneとBoxTwoを宣言し、
Box構成部品と同じ円を作成
この場合は、Box構成部品を貼り付けるすべてのスタイル属性をコピーしてCircle構成部品を作成する必要があります.
しかしながら、
従来は
同じデザインの異なるタグ
たとえば、buttonタグをコンポーネントとして作成し、このボタンコンポーネントの設計をaタグに適用したい場合があります.こんな時はどうすればいいですか?
そうでなければ、
素子にhtml属性を付与する
各inputにrequiredというプロパティをタグ付けしたいとしますが、このinputタグが多すぎると、各inputタグにrequiredを追加するのは難しいです.
ただし、
アニメーションの適用
選択者
ボックスにサブエレメント
したがって、すべての要素をコンポーネント化する必要はなく、
コンポーネントセレクタ
ただし、spanラベルではなく、直接シェイプを個別に作成した構成部品に拡張することもできます.
styled-componsesは何ができますか?
たとえば、
다크 모드
、라이트 모드
を使用すると、非常に簡単な方法で作成できます.どこで使いますか.
Kidhub、グーグル、Spotify、Tinderなど、多くの大手企業がこのライブラリを使用しています.こんな大きな会社で使うのは理由があると思うので、今回はしっかり勉強しておけばいいと思います.
既存の反応からスタイルを適用
style
の要素を直接タグをオブジェクトとして割り当てることによりclassName
다크 모드
または라이트 모드
など)を使用して機能を作成するには、同じコードに別のクラス(色コードのみ)を追加し、モード変更時にすべて変更する必要があります.△小さいプロジェクトではすぐに変わりますが、大きいプロジェクトではコード管理が難しいのではないでしょうか.また、コンポーネントを作成するときに上記の3つの方法で記述される場合、cssを表示するために不要なコードが追加されます.各コンポーネントは、cssを表示することなく
하나하나
であることを望んでいます.すなわち,タグの内部クラス名(例えば
맡은 일을 파악
またはdiv
)をチェックしなければ,それらがどのような素子であり,どのような役割を果たしているのかを明確に見ることができる.styled-コンポーネントの適用
npm i styled-components
span
ライブラリをインストールしてください.import styled from "styled-componets"
インストールされたライブラリをにインポートします.次に、トップ
styled-compoents
をコンポーネント化したいとします.const Father = styled.div`
display: flex;
...
`
const BoxOne = styled.div`
background-color: teal;
width: 100px; // 중복
height: 100px; // 중복
`
const BoxTwo = styled.div`
background-color: tomato;
width: 100px; // 중복
height: 100px; // 중복
`
<Father>
<BoxOne/>
<BoxTwo/>
// ...
// div안에 들어가는 다른 (태그/컴포넌트)들
// ...
</Father>
上記のように宣言して使用すればよい.注意すべきは、宣言時にbacktic(`)を使用する必要があります.また、作成した
div
コンポーネントがFather
を自動的に生成し、宣言したスタイルを追加することもブラウザで確認できます.したがって、classNameを独自に使用する方法を考える必要はありません.BoxOneとBoxTwo冗長
以上、BoxOneとBoxTwoを宣言し、
styled-components
コードを記述したため、유니크한 className
の機能を十分に利用できなかった.しかしながら、중복되는
の機能は素子の機能と同様であり、styled-components
を同一設計から分離することができる.const Box = styled.div`
background-color : ${(props) => props.bgColor};
width: 100px;
height: 100px;
`
<Father>
<Box bgColor="teal"/>
<Box bgColor="tomato"/>
</Father>
このようにして、styled-components
というpropsを、他の部分のみを管理するコンポーネントに変換して、BoxOneとBoxTwoの重複コードを回避することができる.Box構成部品と同じ円を作成
この場合は、Box構成部品を貼り付けるすべてのスタイル属性をコピーしてCircle構成部品を作成する必要があります.
しかしながら、
props
は、要素bgColor
の機能を提供する.従来は
styled-components
を使用しており、括弧(확장
)を使用して拡張されている.const Circle = styled(Box)`
border-radius: 50px;
`
<Father>
<Box bgColor="teal"/>
<Circle bgColor="whitesmoke"/>
</Father>
今回宣言されたstyled.태그
は、他の部分のみを展開できるように、別の要素から同じ値を得ることができる.これにより、()
から情報を取得する必要がなく、他の要素스타일 컴포넌트
を使用することができる.同じデザインの異なるタグ
たとえば、buttonタグをコンポーネントとして作成し、このボタンコンポーネントの設計をaタグに適用したい場合があります.こんな時はどうすればいいですか?
const Btn = styled.button`
color: white;
background-color: tomato;
border: 0;
border-radius: 15px;
`
const Link = styled(Btn)`
...
`
リンクがBtnの拡張として作成されると、最終的にはprops
としてリンクが作成される.そうでなければ、
확장
というpropsがBtn要素に伝達され、他のマーカーに変換される.<Father>
<Btn>Log in</Btn>
<Btn as="a" href="login somewhere...">Log out</Btn>
</Father>
aをbutton태그
という名前のpropsに変換すると、aを"as"
に変換し、タグで使用されるhref属性を使用することができる.素子にhtml属性を付与する
各inputにrequiredというプロパティをタグ付けしたいとしますが、このinputタグが多すぎると、各inputタグにrequiredを追加するのは難しいです.
ただし、
"as"
はhtml属性を付加する機能を有する.const Input = styled.input.attrs({ required: true, minLength: 10 })`
background-color: tomato;
`
<Father>
<Input/>
<Input/>
<Input/>
<Input/>
<Input/>
<Input/>
</Father>
a태그
の後にstyled-components
という名前のメソッドを使用してstyled.input
を挿入するhtmlプロパティを作成すると、すべてのコンポーネントに自動的に適用されます.アニメーションの適用
import styled, {keyframes} from "styled-components"
アニメーションを有効にするにはketframesをインポートする必要があります.const rotation = keyframes` // 뺑글뺑글 도는 애니메이션
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
`;
const rotationBack = keyframes` 원 -> 사각형 -> 원 반복
0% {
transform: rotate(0deg);
border-radius: 0px;
}
50% {
transform: rotate(360deg);
border-radius: 100px;
}
100% {
transform: rotate(0deg);
border-radius: 0px;
}
`;
const Box = styled.div`
height: 200px;
width: 200px;
background: tomato;
animation: ${rotation} 1s linear infinite;
`;
通常のcssのattrs
と同じ効果ですが、styled-componsesのアニメーション管理機能はJavaScriptの객체
と同じです.選択者
ボックスにサブエレメント
animation
がある場合は、サブエレメントを選択するために設計する必要はありません.변수
エレメントから適切なタグを選択することでスタイルを指定できます.const Box = styled.div`
display: flex;
justify-content: center;
align-items: center;
height: 200px;
width: 200px;
background: tomato;
animation: ${rotation} 1s linear infinite;
span { //*** 자식 span태그를 선택합니다.
font-size: 36px;
&:hover{
font-size: 80px;
}
}
`;
function App() {
return (
<Father>
<Box>
<span>😍</span>
</Box>
</Father>
);
}
また、独自のセレクタ<span>😍</span>
を使用して、Box
のタグにより快適なスタイルを指定することもできます.したがって、すべての要素をコンポーネント化する必要はなく、
span:hover
styledおよび他の&(앰퍼센드)
を処理するだけでよい.コンポーネントセレクタ
ただし、spanラベルではなく、直接シェイプを個別に作成した構成部品に拡張することもできます.
한번의 중괄호를 열어서
を한 컴포넌트만
とマークして選択する場合は、どうすればいいですか?const Emoji = styled.span`
font-size: 36px;
`
const Box = styled.div`
display: flex;
justify-content: center;
align-items: center;
height: 200px;
width: 200px;
background: tomato;
animation: ${rotation} 3s linear infinite;
${Emoji} { //
&:hover{
font-size: 80px;
}
}
`;
function App() {
return (
<Father>
<Box>
<Emoji as="p">😍</Emoji>
</Box>
</Father>
);
}
アニメーションで見たように、JavaScriptのtarget
のように使用でき、選択要素も<span>
のように使用できます.Emoji
要素が변수
から변수
に変更されても、要素セレクタは、要素自体をEmoji
に変更することができる.Reference
この問題について([React] Styled-components), 我々は、より多くの情報をここで見つけました https://velog.io/@uiseop/React-Styled-componentsテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol