Reactアプリケーションでスタイリッシュなコンポーネントを使用していて、動的なテーマを使用したいと思っています。私の暗いテーマを使用する領域もあれば、光を使う領域もあります。スタイル付きコンポーネントは、使用されているコンポーネントの外で宣言する必要があるため、テーマを動的にどのように渡すのでしょうか?スタイリッシュなコンポーネントの動的テーマ
答えて
これはまさにThemeProvider
コンポーネントの目的です。彼らは機能を補間する際
あなたのスタイルのコンポーネントには、特別なtheme
小道具へのアクセス権を持っている:
const Button = styled.button`
background: ${props => props.theme.primary};
`
この<Button />
コンポーネントは、今ThemeProvider
によって定義されたテーマに動的に対応します。あなたはどのようにテーマを定義しますか? ThemeProvider
のtheme
小道具に任意のオブジェクトを渡す:
const theme = {
primary: 'palevioletred',
};
<ThemeProvider theme={theme}>
<Button>I'm now palevioletred!</Button>
</ThemeProvider>
我々は関係なく、それはまだよコンポーネントとThemeProviderの間でどのように多くのコンポーネントまたはDOMノードを意味しない、context
を経由して、あなたのスタイル付きのコンポーネントにテーマを提供まったく同じ仕事:
const theme = {
primary: 'palevioletred',
};
<ThemeProvider theme={theme}>
<div>
<SidebarContainer>
<Sidebar>
<Button>I'm still palevioletred!</Button>
</Sidebar>
</SidebarContainer>
</div>
</ThemeProvider>
これはあなたが単一ThemeProvider
にあなたの全体のアプリを包むことができることを意味し、あなたのスタイルのすべてのコンポーネントは、そのテーマを取得します。その1つのプロパティを動的に交換して、明るいテーマと暗いテーマを切り替えることができます。
あなたのアプリには、必要な数だけ、または多くの数のThemeProvider
を置くことができます。ほとんどのアプリは唯一のアプリケーション全体をラップするものを必要としますが、あなたのアプリケーションの一部は、光をテーマとテーマにいくつかの他の部分が暗くなる持っているあなただけの異なるテーマを持つ2つのThemeProvider
秒でそれらをラップします:
const darkTheme = {
primary: 'black',
};
const lightTheme = {
primary: 'white',
};
<div>
<ThemeProvider theme={lightTheme}>
<Main />
</ThemeProvider>
<ThemeProvider theme={darkTheme}>
<Sidebar />
</ThemeProvider>
</div>
Main
内の任意のスタイル付きコンポーネントは、明るいテーマになり、Sidebar
内の任意のスタイルのコンポーネントは、暗いテーマになります。アプリケーションのどの領域にレンダリングされているかに応じて適応します。そのために何もする必要はありません!
私はdocs about themingをチェックアウトすることをお勧めします。スタイリッシュなコンポーネントは非常に念頭に置いて作られています。
スタイリッシュなコンポーネントが存在する前のJSのスタイルの大きな苦境の1つは、以前のライブラリがスタイルのカプセル化とコロケーションを非常にうまく行ったが、適切なテーマサポートがなかったことでした。私たちが既存の図書館で持っていた他の苦労点についてもっと知りたい場合は、my talk at ReactNLでスタイリッシュな構成要素をリリースすることをお勧めします。 (注:スタイリッシュなコンポーネントの最初の外観は約25分で、驚かないでください)
- 1. スタイリッシュなコンポーネント:スマートラッパーコンテナ
- 2. スタイリッシュなコンポーネントとブートストラップ
- 3. スタイリッシュなコンポーネントと反応的に親の小道具
- 4. スタイリッシュなコンポーネントを使用するUIライブラリ
- 5. スタイリッシュなコンポーネントをホットリロードする方法は?
- 6. スタイリッシュなコンポーネントに反応する:他のコンポーネントを参照する
- 7. スタイリッシュなコンポーネントを使用してメディアテンプレートを使用できない
- 8. @ font-faceのスタイリッシュなコンポーネントを分離しました
- 9. スタイリッシュなコンポーネントに小道具を渡す方法
- 10. 親の動的な子コンポーネント
- 11. アンプでのスタイリッシュなレイアウト - img
- 12. ASP .NET MVC 2:動的テーマ
- 13. は、動的コンポーネント
- 14. Angular2動的コンポーネント
- 15. 動的コンポーネント
- 16. VueJS 2の動的コンポーネントを動的コンポーネントにバインドする方法
- 17. Enzymesの浅くてスタイリッシュなコンポーネントのThemeProviderを使用してスタイル付きコンポーネントをテストするには?
- 18. 設定のテーマの色を動的
- 19. ReactJs:動的なコンポーネントのコレクションをレンダリング
- 20. emberコンポーネントの動的CSS?動的なCSSプロパティを渡す方法
- 21. スタイリッシュなコンポーネントを持つ子に渡す小道具を停止する
- 22. 角2の素材動的テーマ
- 23. 青写真テーマの動的%% GLOBAL_UPC %%
- 24. スタイリッシュなCSSの1ページのWebサイト
- 25. スタイリッシュなラジオボタンが機能しない
- 26. Angular2動的コンポーネントに最適な方法
- 27. 動的コンポーネントonClickが機能しない
- 28. 角2動的コンポーネントのクリックイベント
- 29. QML動的コンポーネントの作成
- 30. emberコンポーネントの動的パラメータ
素晴らしいです。どうもありがとう!!!! –
私はテーマのためのreduxを持っていますconst initialState = {theme: 'sky'};デフォルトをエクスポートする(state = initialState、action)=> {switch(action.type){default:return state; }}、メインアプリケーションで注入する方法は? –
stackdave