详解如何在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;字符换成&quot;&amp;amp:&quot;
Oct 19 Javascript
定义select的边框颜色
Apr 28 Javascript
js设置cookie过期当前时间减去一秒相当于立即过期
Sep 04 Javascript
解析JavaScript中的字符串类型与字符编码支持
Jun 24 Javascript
使用Node.js给图片加水印的方法
Nov 15 Javascript
jQuery中页面返回顶部的方法总结
Dec 30 Javascript
基于JQuery和原生JavaScript实现网页定位导航特效
Apr 03 jQuery
浅谈angularjs依赖服务注入写法的注意点
Apr 24 Javascript
Angular2 自定义表单验证器的实现方法
Dec 14 Javascript
JavaScript代码异常监控实现过程详解
Feb 17 Javascript
使用Node.js实现base64和png文件相互转换的方法
Mar 11 Javascript
React中的Context应用场景分析
Jun 11 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
php的list()的一步操作给一组变量进行赋值的使用
2011/05/18 PHP
探讨PHP调用时间格式的参数详解
2013/06/06 PHP
[原创]php逐行读取txt文件写入数组的方法
2015/07/02 PHP
PHP的静态方法与普通方法用法实例分析
2019/09/26 PHP
JavaScript DOM 学习第二章 编辑文本
2010/02/19 Javascript
jQuery.ajax 用户登录验证代码
2010/10/29 Javascript
深入理解javascript中return的作用
2013/12/30 Javascript
jQuery获取iframe的document对象的方法
2014/10/10 Javascript
JavaScript 面向对象与原型
2015/04/10 Javascript
简介JavaScript中Math.LOG10E属性的使用
2015/06/14 Javascript
javascript比较语义化版本号的实现代码
2016/09/09 Javascript
Bootstrap CSS布局之图像
2016/12/17 Javascript
bootstrap多种样式进度条展示
2016/12/20 Javascript
vue实现的双向数据绑定操作示例
2018/12/04 Javascript
从vue源码看props的用法
2019/01/09 Javascript
JavaScript定时器设置、使用与倒计时案例详解
2019/07/08 Javascript
在vue项目中 实现定义全局变量 全局函数操作
2020/10/26 Javascript
Python做文本按行去重的实现方法
2016/10/19 Python
python中matplotlib实现最小二乘法拟合的过程详解
2017/07/11 Python
python实现验证码识别功能
2018/06/07 Python
Python操作MySQL数据库的方法
2018/06/20 Python
Python+OpenCV采集本地摄像头的视频
2019/04/25 Python
python顺序执行多个py文件的方法
2019/06/29 Python
使用pycharm和pylint检查python代码规范操作
2020/06/09 Python
Python中openpyxl实现vlookup函数的实例
2020/10/28 Python
乐高官方旗舰店:LEGO积木玩具
2019/04/06 全球购物
雅虎笔试题(字符串操作)
2015/03/24 面试题
掌上明珠Java程序员面试总结
2016/02/23 面试题
如何执行一个shell程序
2012/11/23 面试题
法学研究生自我鉴定范文
2013/12/04 职场文书
青年志愿者事迹材料
2014/02/07 职场文书
合同和协议有什么区别?
2014/10/08 职场文书
办理收楼委托书范本
2014/10/09 职场文书
公司开业主持词
2015/07/02 职场文书
Tomcat 与 maven 的安装与使用教程
2022/06/16 Servers
mysql sock文件存储了什么信息
2022/07/15 MySQL