详解如何在Javascript和Sass之间共享变量


Posted in Javascript onNovember 13, 2019

在环境之间共享变量是编程的圣杯。以下是在Javascript和

Sass(或CSS!)之间共享变量的方法。

随着大型单页应用程序的兴起,Javascript和CSS越来越交织在一起。通常在两个值之间复制值(例如,与React的CSSTransitionGroup一起使用的动画持续时间或将品牌颜色传递到图形库中)。但是,保持两个具有相同值的副本不可避免地导致仅更新一个副本并最终导致令人沮丧的错误。幸运的是,使用webpack和CSS模块,有更好的方法。在此博客文章中,我们将通过上述示例为共享动画持续时间,探讨如何在脚本和样式之间共享变量CSSTransitionGroup。

第一步是安装我们的依赖项:

npm install sass-loader node-sass webpack --save-dev

接下来,我们需要配置webpack以便使用,sass-loader以便我们可以从Javascript访问我们的Sass代码。

// webpack.config.js
  module.exports = {
   module: {
    rules: [
     {
      test: /\.css$/,
      use: ['style-loader', 'css-loader', 'sass-loader']
     }
    ]
   }
  }

现在开始有趣的部分。我们在Sass中定义实际的变量值,并将其导出到Javascript。CSS模块有一个名为的简洁实用程序:export。该:export指令的工作原理基本上类似于ES6的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;
  }

您会注意到,我们首先在一个变量中声明整数值,然后在另一个变量中将0ms其添加。这样一来,我们就只能导出,"250"而不是"250ms"在Javascript方面更容易解析(将0ms数字强制将其“类型”插入ms)。

现在,在Javascript中,我们只需要从样式表中导入样式,然后从导出的变量中解析出一个int即可!

// 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之间同步更改的麻烦时,它会成倍地回报。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
基于jsTree的无限级树JSON数据的转换代码
Jul 27 Javascript
jquery创建并行对象或者合并对象的实现代码
Oct 10 Javascript
poshytip 基于jquery的 插件 主要用于显示微博人的图像和鼠标提示等
Oct 12 Javascript
基于JavaScript实现通用tab选项卡(通用性强)
Jan 07 Javascript
js获取浏览器高度 窗口高度 元素尺寸 偏移属性的方法
Nov 21 Javascript
JavaScript利用正则表达式替换字符串中的内容
Dec 12 Javascript
ES6中class类用法实例浅析
Apr 06 Javascript
解决vue+webpack打包路径的问题
Mar 06 Javascript
vue实现树形菜单效果
Mar 19 Javascript
JavaScript实现简单的文本逐字打印效果示例
Apr 12 Javascript
JavaScript从原型到原型链深入理解
Jun 03 Javascript
在vue项目中使用sass语法问题
Jul 18 Javascript
JavaScript数组及常见操作方法小结
Nov 13 #Javascript
mpvue微信小程序的接口请求fly全局拦截代码实例
Nov 13 #Javascript
javascript操作元素的常见方法小结
Nov 13 #Javascript
Vue监听滚动实现锚点定位(双向)示例
Nov 13 #Javascript
vue项目中锚点定位替代方式
Nov 13 #Javascript
微信小程序后端(java)开发流程的详细步骤
Nov 13 #Javascript
jQuery实现滑动星星评分效果(每日分享)
Nov 13 #jQuery
You might like
ajax缓存问题解决途径
2006/12/06 PHP
Base64在线编码解码实现代码 演示与下载
2011/01/08 PHP
使用php验证复选框有效性的示例
2013/11/13 PHP
php 从指定数字中获取随机组合的简单方法(推荐)
2017/04/05 PHP
MacOS下PHP7.1升级到PHP7.4.15的方法
2021/02/22 PHP
简短几句jquery代码的实现一个图片向上滚动切换
2011/09/02 Javascript
js获取当前月的第一天和最后一天的小例子
2013/11/18 Javascript
使图片旋转的3种解决方案
2013/11/21 Javascript
jquery toolbar与网页浮动工具条具体实现代码
2014/01/12 Javascript
Javascript原型链和原型的一个误区
2014/10/22 Javascript
jQuery中children()方法用法实例
2015/01/07 Javascript
JS实现可缩放、拖动、关闭和最小化的浮动窗口完整实例
2015/03/04 Javascript
javascript实现加载xml文件的方法
2015/11/24 Javascript
jQuery.ajax 跨域请求webapi设置headers的解决方案
2016/08/08 Javascript
JS使用正则实现去掉字符串左右空格的方法
2016/12/27 Javascript
基于Bootstrap 3 JQuery及RegExp的表单验证功能
2017/02/16 Javascript
vue2.0在table中实现全选和反选的示例代码
2017/11/04 Javascript
webpack中CommonsChunkPlugin详细教程(小结)
2017/11/09 Javascript
微信小程序实现弹出菜单动画
2019/06/21 Javascript
微信小程序使用蓝牙小插件
2019/09/23 Javascript
jquery轮播图插件使用方法详解
2020/07/31 jQuery
[54:45]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 Optic vs OG
2018/04/02 DOTA
Python设计模式之代理模式实例
2014/04/26 Python
Python实现的生成自我描述脚本分享(很有意思的程序)
2014/07/18 Python
python实现读取excel写入mysql的小工具详解
2017/11/20 Python
python网络爬虫之如何伪装逃过反爬虫程序的方法
2017/11/23 Python
浅谈tensorflow中Dataset图片的批量读取及维度的操作详解
2020/01/20 Python
python 爬虫 实现增量去重和定时爬取实例
2020/02/28 Python
Python tcp传输代码实例解析
2020/03/18 Python
PIP和conda 更换国内安装源的方法步骤
2020/09/21 Python
python 实现简易的记事本
2020/11/30 Python
Europcar西班牙:全球汽车租赁领域的领导者
2018/09/17 全球购物
代办出身证明书
2014/10/21 职场文书
2015年度党员个人总结
2015/02/14 职场文书
2019年作为一名实习生的述职报告
2019/09/29 职场文书
Redis 异步机制
2022/05/15 Redis