使用するバージョン
react : 17.0.2
linaria : 3.0.0-beta
プロジェクトの作成
Create React Appでプロジェクトを作成します。
今回はTypeScriptで作成。
$ npx create-react-app linaria-test --template typescript作成したlinaria-test をカレントにします。
$ cd linaria-testLinariaのインストール
$ yarn add @linaria/core @linaria/react @linaria/babel-preset @linaria/shakerwebpack-loaderもインストールします。
$ yarn add -D @linaria/webpack-loaderCreate React App用のWebpack設定ライブラリ
Linariaはwebpack.config.jsを編集する必要があります。
Create React App 環境ではwebpack.config.jsが隠蔽されているので、これを編集できるようにします。
(Create React App を使用していなく、webpack.configを編集できる環境の場合は飛ばしてください)
ejectして編集する方法もありますが、今回はライブラリを導入して上書きで動作させます。
$ yarn add -D customize-cra react-app-rewiredpackage.jsonを編集してreact-app-rewiredから起動するようにします。
"scripts": { "start": "react-app-rewired start", "build": "react-app-rewired build", "test": "react-app-rewired test --env=jsdom", "eject": "react-scripts eject"},webpack.configの編集
通常はwebpack.config.jsを編集しますが、先ほどreact-app-rewiredを使えるようにしたので、config-overrides.jsというファイルを作成します。
このファイルを編集することで、Create React App 標準のwebpack.config.jsを生かしつつ上書きで設定ができるようになります。
const { useBabelRc, override, addWebpackModuleRule } = require('customize-cra')
module.exports = override( useBabelRc(), addWebpackModuleRule({ test: /\.(tsx|ts)$/, use: [ { loader: 'babel-loader' }, { loader: '@linaria/webpack-loader', options: { cacheDirectory: 'src/.linaria_cache', sourceMap: process.env.NODE_ENV !== 'production', }, }, ], }),)jsの場合はtsx|tsをjsx|jsに置き換えてください。
次に、.babelrcを下記のように新たに作成します。
{ "presets": [ ["react-app", { "flow": false, "typescript": true }], "@linaria" ]}これで設定は完了です。Linariaを使う準備ができました。
$ yarn startで、開発をはじめましょう。
スタイルの書き方
styled-componentsのようにコンポーネントとして作成する方法と通常のスタイルのようにclassNameで指定する方法があります。
最初はコンポーネントの書き方。
import { styled } from '@linaria/react'const Title = styled.h1` font-size: 23px;`function App() { return ( <div className="App"> <Title>タイトル</Title> </div> )}次は、classNameに指定する書き方。
インポートするファイルが違うのに注意しましょう。
import { css } from '@linaria/core'const title = css` font-size: 30px;`function App() { return ( <div className="App"> <h1 className={title}>タイトル</h1> </div> )}HTMLの出力はこのようにクラス名が変換されます。
<h1 class="tuwg8pj">スタイル設定</h1>ファイルの書き出し
ビルドしてファイルの確認をしてみましょう。
$ yarn buildデフォルト設定の場合build/static/cssにCSSファイルが書き出されいてると思います。

