详解如何在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 相关文章推荐
js 与或运算符 || &amp;&amp; 妙用
Dec 09 Javascript
简短几句 通俗解释javascript的闭包
Jan 17 Javascript
js控制滚动条缓慢滚动到顶部实现代码
Mar 20 Javascript
浅析document.ready和window.onload的区别讲解
Dec 18 Javascript
jQuery操作select下拉框的text值和value值的方法
May 31 Javascript
使用jquery解析XML的方法
Sep 05 Javascript
jquery实现鼠标点击后展开列表内容的导航栏效果
Sep 14 Javascript
跟我学习javascript的call(),apply(),bind()与回调
Nov 16 Javascript
JavaScript BASE64算法实现(完美解决中文乱码)
Jan 10 Javascript
vuejs实现本地数据的筛选分页功能思路详解
Nov 15 Javascript
jquery ajax 请求小技巧实例分析
Nov 11 jQuery
Postman内建变量常用方法实例解析
Jul 28 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
解决文件名解压后乱码的问题 将文件名进行转码的代码
2012/01/10 PHP
php类中private属性继承问题分析
2012/11/01 PHP
屏蔽机器人从你的网站搜取email地址的php代码
2012/11/14 PHP
php实现可运算的验证码
2015/11/10 PHP
[原创]php常用字符串输出方法分析(echo,print,printf及sprintf)
2016/07/09 PHP
yii2 数据库读写分离配置示例
2017/02/10 PHP
js下用层来实现select的title提示属性
2010/02/23 Javascript
表单JS弹出填写提示效果代码
2011/04/16 Javascript
js控制表单不能输入空格的小例子
2013/11/20 Javascript
javascript实现的弹出层背景置灰-模拟(easyui dialog)
2013/12/27 Javascript
JS函数重载的解决方案
2014/05/13 Javascript
分享有关jQuery中animate、slide、fade等动画的连续触发、滞后反复执行的bug
2016/01/10 Javascript
Javascript实现base64的加密解密方法示例
2017/06/27 Javascript
浅谈ES6 模板字符串的具体使用方法
2017/11/07 Javascript
vue.js动画中的js钩子函数的实现
2018/07/06 Javascript
Vue基本使用之对象提供的属性功能
2019/04/30 Javascript
Vue组件之高德地图地址选择功能的实例代码
2019/06/21 Javascript
解决vue打包后刷新页面报错:Unexpected token
2019/08/27 Javascript
在vue中实现echarts随窗体变化
2020/07/27 Javascript
jquery实现点击左右按钮切换图片
2021/01/27 jQuery
[46:48]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第三局
2016/02/25 DOTA
Python求导数的方法
2015/05/09 Python
Linux上安装Python的PIL和Pillow库处理图片的实例教程
2016/06/23 Python
python遍历一个目录,输出所有的文件名的实例
2018/04/23 Python
Python函数装饰器实现方法详解
2018/12/22 Python
Python零基础入门学习之输入与输出
2019/04/03 Python
python 读写excel文件操作示例【附源码下载】
2019/06/19 Python
Python爬取破解无线网络wifi密码过程解析
2019/09/17 Python
html5中的input新属性range使用记录
2014/09/05 HTML / CSS
捷克购买家具网站:JENA nábytek
2020/03/19 全球购物
成人高等教育毕业生自我鉴定
2013/10/22 职场文书
研究生毕业自我鉴定范文
2014/03/27 职场文书
2015年乡镇财政工作总结
2015/05/19 职场文书
cf战队宣传语
2015/07/13 职场文书
爱岗敬业先进典型事迹材料(2016推荐版)
2016/02/26 职场文书
Mysql 数据库中的 redo log 和 binlog 写入策略
2022/04/26 MySQL