create-react-appで作成したReactプロジェクトにstyled-componentsを導入してみます。また、実際にstyled-componentsを利用しているプロジェクトからstyled-componentsの活用方法を調べます。
目次
プロジェクト構築
create-react-app
まずは、create-react-appで新規Reactプロジェクトを構築します。
npx create-react-app styled-components-app
src/App.js
( styled-componentsを利用してない )
classNameプロパティ
でスタイルを反映しています。
import React from 'react';
import logo from './logo.svg';
import './App.css';
function App() {
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<p>
Edit <code>src/App.js</code> and save to reload.
</p>
<a
className="App-link"
href="https://reactjs.org"
target="_blank"
rel="noopener noreferrer"
>
Learn React
</a>
</header>
</div>
);
}
export default App;
src/App.css
.App {
text-align: center;
}
.App-logo {
height: 40vmin;
}
.App-header {
background-color: #282c34;
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: calc(10px + 2vmin);
color: white;
}
.App-link {
color: #09d3ac;
}
styled-components導入
インストール
styled-components
をインストールします。
npm install --save styled-components
src/App.js
( styled-componentsを利用 )
styled-components
を利用して、src/App.js
を実装し直します。
import React from 'react';
import logo from './logo.svg';
// import './App.css';
import styled from 'styled-components';
function App() {
return (
<Wrapper>
<Header>
<Logo src={logo} alt="logo" />
<p>
Edit <code>src/App.js</code> and save to reload.
</p>
<Link
href="https://reactjs.org"
target="_blank"
rel="noopener noreferrer"
>
Learn React
</Link>
</Header>
</Wrapper>
);
}
const Wrapper = styled.div`
text-align: center;
`;
const Header = styled.header`
background-color: #282c34;
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: calc(10px + 2vmin);
color: white;
`;
const Logo = styled.img`
height: 40vmin;
`;
const Link = styled.a`
color: #09d3ac;
`;
export default App;
以下、生成されたコードです。
styled-componentsの活用例
実際に styled-components
を利用しているリポジトリから活用例を確認してみます。
例として、https://github.com/withspectrum/spectrumでのstyled-components
の活用例を取り上げます。
グローバル
- https://github.com/withspectrum/spectrum/blob/alpha/src/components/globals/index.js
- 複数コンポーネントに影響のあるグローバルな
コンポーネント
プロパティ
を定義しているようです。
- 複数コンポーネントに影響のあるグローバルな
- https://github.com/withspectrum/spectrum/blob/alpha/src/reset.css.js
- ヘルパー関数(
createGlobalStyle
)を利用しています。 - https://www.styled-components.com/docs/api#createglobalstyle
- ヘルパー関数(
テーマカラー
その他
props
- スタイル拡張(
styled()
) - ヘルパー関数
上記のような活用方法も以下コンポーネントから参考にできると思います。
- https://github.com/withspectrum/spectrum/tree/alpha/src/components/loading
- https://github.com/withspectrum/spectrum/tree/alpha/src/components/button
- https://github.com/withspectrum/spectrum/tree/alpha/src/components/menu
参考・関連
- https://github.com/styled-components/styled-components
- https://www.styled-components.com/docs
- https://www.styled-components.com/docs/basics#react-native
- https://www.styled-components.com/docs/api#typescript
- https://www.styled-components.com/docs/tooling#jest-integration
- https://www.styled-components.com/docs/tooling#stylelint