JavascriptとSassの間で変数を共有する方法
2151 ワード
環境間で変数を共有するのはプログラミングされた聖杯です。以下はJavascriptと
Sass(またはCSS!)間で変数を共有する方法です。
大型の単一ページアプリケーションの台頭に伴い、JavascriptとCSSはますます織り交ぜられている。通常、2つの値の間で値を複製する(例えば、ReactのCSSTrasitionGroupと一緒に使用されるアニメーションの継続時間、またはブランドの色をグラフィカルライブラリに渡す)。しかし、同じ値を持つ二つのレプリカを維持することは、一つのレプリカだけを更新し、最終的には落胆させるエラーを引き起こすことは避けられない。幸い、webpackとCSSモジュールを使って、もっといい方法があります。このブログ記事では、上記の例を通じて、アニメーションの持続時間を共有するために、変数CSSTrasitionGroupをスクリプトとスタイルの間で共有する方法を検討します。
第一歩は私達をインストールする依存項です。
現在、Javascriptでは、スタイルシートからスタイルを導入し、エクスポートした変数からヒントを導き出すだけでいいです。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
Sass(またはCSS!)間で変数を共有する方法です。
大型の単一ページアプリケーションの台頭に伴い、JavascriptとCSSはますます織り交ぜられている。通常、2つの値の間で値を複製する(例えば、ReactのCSSTrasitionGroupと一緒に使用されるアニメーションの継続時間、またはブランドの色をグラフィカルライブラリに渡す)。しかし、同じ値を持つ二つのレプリカを維持することは、一つのレプリカだけを更新し、最終的には落胆させるエラーを引き起こすことは避けられない。幸い、webpackとCSSモジュールを使って、もっといい方法があります。このブログ記事では、上記の例を通じて、アニメーションの持続時間を共有するために、変数CSSTrasitionGroupをスクリプトとスタイルの間で共有する方法を検討します。
第一歩は私達をインストールする依存項です。
npm install sass-loader node-sass webpack --save-dev
次に、私たちはJavascriptから私たちのSassコードにアクセスできるようにwebpackを構成する必要があります。
// webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/,
use: ['style-loader', 'css-loader', 'sass-loader']
}
]
}
}
今から面白い部分です。Sassで実際の変数値を定義し、Javascriptにエクスポートします。CSSモジュールにはシンプルで実用的なプログラムがあります。この:export命令の動作原理は、基本的にES 6のexportキーワードに似ています。あなたのSassコードはJavascriptで使用する変数名と関連する値を含むオブジェクトをエクスポートします。これらの値は文字列としてエクスポートされます。
// styles/animation.scss
$animation-length: 250;
$animation-length-ms: $animation-length + 0ms;
:export {
animationMillis: $animation-length-ms;
}
.component-enter {
...
transition: all $animation-length-ms ease-in;
}
まず変数に整数値を宣言し、他の変数に0 msを追加します。このようにすれば、「250 ms」ではなく「250 ms」がJavascriptの方が解析しやすい(0 msの数字を強制的にmsに挿入する)ということだけを導き出すことができます。現在、Javascriptでは、スタイルシートからスタイルを導入し、エクスポートした変数からヒントを導き出すだけでいいです。
// js/animation.js
import styles from '../styles/animation.scss'
import CSSTransitionGroup from 'react-transition-group/CSSTransitionGroup'
const millis = parseInt(styles.animationMillis)
...
<CSSTransitionGroup
transitionName="component"
transitionEnterTimeout={millis}
transitionLeaveTimeout={millis}
/>
...
この方法は非常に簡単ですが、JavascriptとSassの間で同期して変更するトラブルを避けると、倍になります。以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。