详解如何在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 相关文章推荐
javascript 异步页面查询实现代码(asp.net)
May 26 Javascript
使用ExtJS技术实现的拖动树结点
Aug 05 Javascript
用jquery方法操作radio使其默认选项是否
Sep 10 Javascript
wangEditor编辑器失去焦点后仍然可以在原位置插入图片分析
May 06 Javascript
JQuery实现简单的图片滑动切换特效
Nov 22 Javascript
微信小程序之拖拽排序(代码分享)
Jan 21 Javascript
打造通用的匀速运动框架(实例讲解)
Oct 17 Javascript
微信小程序实现弹出层效果
May 26 Javascript
VueJS 组件参数名命名与组件属性转化问题
Dec 03 Javascript
微信小程序引入VANT组件的方法步骤
Sep 19 Javascript
JavaScript Dom 绑定事件操作实例详解
Oct 02 Javascript
js加减乘除精确运算方法实例代码
Jan 17 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
域名查询代码公布
2006/10/09 PHP
php读取纯真ip数据库使用示例
2014/01/26 PHP
PHP使用DOMDocument类生成HTML实例(包含常见标签元素)
2014/06/25 PHP
PHP学习笔记(二) 了解PHP的基本语法以及目录结构
2014/08/04 PHP
PHP实现即时输出、实时输出内容方法
2015/05/27 PHP
php实现给一张图片加上水印效果
2016/01/02 PHP
Yii框架弹出窗口组件CJuiDialog用法分析
2017/01/07 PHP
PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法
2017/06/20 PHP
IE php关于强制下载文件的代码
2008/08/23 Javascript
Javascript代码在页面加载时的执行顺序介绍
2013/05/03 Javascript
javascript中为某个元素指定事件的三种方式
2014/08/07 Javascript
JS获取鼠标相对位置的方法
2016/09/20 Javascript
javascript 动态样式添加的简单实现
2016/10/11 Javascript
详细AngularJs4的图片剪裁组件的实例
2017/07/12 Javascript
实例详解JSON取值(key是中文或者数字)方式
2017/08/24 Javascript
详解vue2.0 不同屏幕适配及px与rem转换问题
2018/02/23 Javascript
BootStrap表单验证中的非Submit类型按钮点击时触发验证的坑
2019/09/05 Javascript
微信小程序swiper左右扩展各显示一半代码实例
2019/12/05 Javascript
[02:34]DOTA2英雄基础教程 幽鬼
2014/01/02 DOTA
Python实现简单的文件传输与MySQL备份的脚本分享
2016/01/03 Python
简单谈谈python中的Queue与多进程
2016/08/25 Python
python实现字符串连接的三种方法及其效率、适用场景详解
2017/01/13 Python
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
2017/06/12 Python
Python爬虫UA伪装爬取的实例讲解
2021/02/19 Python
斯德哥尔摩通票:Stockholm Pass
2018/01/09 全球购物
澳大利亚领先的在线机械五金、园艺和存储专家:Edisons
2018/03/24 全球购物
全球在线商店:BerryLook
2019/04/14 全球购物
C#基础面试题
2016/10/17 面试题
行政办公员自我评价分享
2013/12/14 职场文书
社区志愿者心得体会
2014/01/03 职场文书
领导干部个人整改措施落实情况汇报
2014/10/29 职场文书
2014员工聘用协议书(最新版)
2014/11/24 职场文书
2014年图书管理员工作总结
2014/12/01 职场文书
励志正能量20句:送给所有为梦想拼搏的人
2019/11/11 职场文书
如何利用Matlab制作一款真正的拼图小游戏
2021/05/11 Python
Redis如何实现验证码发送 以及限制每日发送次数
2022/04/18 Redis