详解如何在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学习笔记(二) js对象
Oct 25 Javascript
基于RequireJS和JQuery的模块化编程日常问题解析
Apr 14 Javascript
基于JS+Canves实现点击按钮水波纹效果
Sep 15 Javascript
vue-router 路由基础的详解
Oct 17 Javascript
Vue中JS动画与Velocity.js的结合使用
Feb 13 Javascript
vue全局自定义指令-元素拖拽的实现代码
Apr 14 Javascript
微信公众平台 发送模板消息(Java接口开发)
Apr 17 Javascript
生产制造追溯系统之再说条码打印
Jun 03 Javascript
ES6 Object属性新的写法实例小结
Jun 25 Javascript
解决qrcode.js生成二维码时必须定义一个空div的问题
Jul 09 Javascript
Vue Router中应用中间件的方法
Aug 06 Javascript
json.stringify()与json.parse()的区别以及用处
Jan 25 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使用curl发送json格式数据实例
2013/12/17 PHP
PHP实现的增强性mhash函数
2015/05/27 PHP
PHP实现的文件上传类与用法详解
2017/07/05 PHP
封装好的省市地区联动控件附下载
2007/08/13 Javascript
js弹窗代码 可以指定弹出间隔
2010/07/03 Javascript
JS验证控制输入中英文字节长度(input、textarea等)具体实例
2013/06/21 Javascript
Jquery右下角抖动、浮动 实例代码(兼容ie6、FF)
2013/08/15 Javascript
分享我的jquery实现下拉菜单心的
2015/11/29 Javascript
JavaScript记录光标在编辑器中位置的实现方法
2016/04/22 Javascript
jQuery查看选中对象HTML代码的方法
2016/06/17 Javascript
原生js和css实现图片轮播效果
2017/02/07 Javascript
Vue.js -- 过滤器使用总结
2017/02/18 Javascript
vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)
2017/08/04 Javascript
微信小程序picker组件简单用法示例【附demo源码下载】
2017/12/05 Javascript
js保留两位小数方法总结
2018/01/31 Javascript
详解Vue 全局引入bass.scss 处理方案
2018/03/26 Javascript
安装Node.js并启动本地服务的操作教程
2018/05/12 Javascript
Vue加载组件、动态加载组件的几种方式
2018/08/31 Javascript
VUE接入腾讯验证码功能(滑块验证)备忘
2019/05/07 Javascript
vue路由传参三种基本方式详解
2019/12/09 Javascript
python 使用sys.stdin和fileinput读入标准输入的方法
2018/10/17 Python
在双python下设置python3为默认的方法
2018/10/31 Python
python实现合并两个排序的链表
2019/03/03 Python
django实现类似触发器的功能
2019/11/15 Python
python 利用turtle模块画出没有角的方格
2019/11/23 Python
python实现图像拼接功能
2020/03/23 Python
详解css3 mask遮罩实现一些特效
2018/10/24 HTML / CSS
Adobe Html5 Extension开发初体验图文教程
2017/11/14 HTML / CSS
芬兰攀岩、山地运动和户外活动用品购物网站:Bergfreunde
2016/10/06 全球购物
全球速卖通法国在线交易平台:AliExpress法国
2017/07/07 全球购物
教你打造完美的创业计划书
2014/01/06 职场文书
给校长的建议书400字
2014/05/15 职场文书
开展批评与自我批评发言材料
2014/05/15 职场文书
服装仓管员岗位职责
2014/06/17 职场文书
迎国庆横幅标语
2014/10/08 职场文书
python基础之错误和异常处理
2021/10/24 Python