これは、最近までReactの世界で解決された問題ではありませんでした。
私はリアクタコンポーネントライブラリElementalUIのメンテナーの一人で、過去6〜12ヶ月間さまざまなスタイルを試してきました。 (!)名前をつけて、試しました。 (私はReactNL keynoteの中で最も人気のある図書館の経験について話しましたが、どこが故障したか)
問題は、現在のスタイリングライブラリには、ほとんどの場合、非常にハッキーで、ユーザーフレンドリーではありませんが、コンポーネントを配布するときにはそうではありません。
だから私たちはstyled-components
を作りました。 styled-components
には興味深いプロパティがあり、その1つはテーマがライブラリに直接組み込まれているため、配布可能なコンポーネントを構築するのに最適です。
ここでは簡単な説明ですが、すべてを説明しているdocumentationをお試しください。
これはstyled-components
の基本的な使い方は次のようになります。
import React from 'react';
import styled from 'styled-components';
// Create a <Wrapper> react component that renders a <section> with
// some padding and a papayawhip background
const Wrapper = styled.section`
padding: 4em;
background: papayawhip;
`;
この変数、Wrapper
、今あなたがレンダリングできるコンポーネントに反応さ:
// Use them like any other React component – except they're styled!
<Wrapper>
<Title>Hello World, this is my first styled component!</Title>
</Wrapper>
(もしライブプレイグラウンドを取得する画像をクリックしてください)
タグ付きテンプレートリテラルに補間関数を渡すと、コンポーネントに渡されたプロパティが渡されます。これは、あなたが小道具に適応できることを意味します。ここでは
import styled from 'styled-components';
const Button = styled.button`
/* Adapt the colors based on primary prop */
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;
`;
、私たちは、あなたが他の同じようprimary
を作ることができButton
コンポーネントを反応させるの作成したコンポーネント:
<Button>Normal</Button>
<Button primary>Primary</Button>
今すぐ来ますテーマの側面。今
import { ThemeProvider } from 'styled-components';
const theme = {
main: 'mediumseagreen',
};
ReactDOM.render(
<ThemeProvider theme={theme}>
<MyApp />
</ThemeProvider>,
myElem
);
そのThemeProvider
内の任意のスタイルのコンポーネント、コンテキストにどんなに深く感謝、以下となります。私たちは中にあなたがtheme
を渡し、アプリ(またはアプリの一部)をラップすることができますThemeProvider
と呼ばれるコンポーネントをエクスポートこのtheme
を小道具に注入する。
これはthemable Button
は次のようになります。
import styled from 'styled-components';
const Button = styled.button`
/* Color the background and border with theme.main */
background: ${props => props.theme.main};
border: 2px solid ${props => props.theme.main};
/* …more styles here… */
`;
今、あなたのButton
は、それが渡さtheme
を取ると、それはそれに基づいたスタイリングです変更されます! (defaultProps
でデフォルトを提供することもできます)
これは、styled-components
の要点で、配布可能なコンポーネントの構築にどのように役立ちますか?
現在WIP doc about writing third-party component librariesがあります。私がチェックアウトすることをお勧めします。もちろん、通常のドキュメントも参考にしてください。私たちはすべての拠点をカバーしようとしました。あなたが嫌いなものを見た場合、またはあなたが不足していると思われる場合はすぐにお知らせください。
styled-components
について他に質問がある場合は、ここに返信するか、Twitterにお問い合わせください。 (@mxstbr)
これで独自のカスタムコンポーネントをどのようにスタイル設定しますか? divラッパーを使用するだけですか? – MoeSattler
はい、私はより大きなコンポーネントごとにたくさんのスタイル付きコンポーネントを使用します。このようなもの: const Btn = styled。ボタン ' スタイル:ここ; ' CONSTボタン=(小道具)=> { リターン( {props.text} )。 } –
mxstbr
コンポーネント内のスタイルの実際の結合にどのように対処していますか?例えば、私のすべてのボタンが5pxの半径を必要としているとしましょう。私はそれらのすべてに行き、それらを手で変更しなければなりません。それともあなたの投稿を間違って読んでいますか?またはメディアの問い合わせ、どのようにそれらを使用するのですか? –