作为一个卑微的小前端,想要快速,稳定,优雅的实现需求功能。一些成熟的js库是必不可少的,我现在分享下我在开发过程中常用的js库,以及一些基本的用法;
1. moment.js
这个相信大家都不会陌生,处理时间格式这块无出其右,官网的用法和示例也十分的清晰,官网传送门。我还是写一点自己常用的几个API,也当下备忘。
引用的时候我一般都会引用moment-timezone这个包,可以处理时区相关的内容;
const moment = require('moment-timezone')
一般情况下表单的时间默认值会是最近七天,最近3个月,或者本月月初至今;
console.log('月初至今', moment().startOf('month').format('YYYY-MM-DD'),'-',moment().format('YYYY-MM-DD'))
console.log('最近7天', moment().subtract(7,'days').format('YYYY-MM-DD'),'-',moment().format('YYYY-MM-DD'))
console.log('最近3月', moment().subtract(3,'month').format('YYYY-MM-DD'),'-',moment().format('YYYY-MM-DD'))
// 月初至今 2020-01-01 - 2020-01-07
// 最近7天 2019-12-31 - 2020-01-07
// 最近3月 2019-10-07 - 2020-01-07
时间的解析或者展示
moment(value).format('YYYY-MM-DD HH:mm:ss')
// 如果传入的时间格式不是标准格式,则第二个参数是当前值的格式,例如20200110
moment(value,'YYYYMMDD').format('YYYY-MM-DD')
时区处理相关,一般与后端交互使用的都是时间戳,因为时间戳是唯一存在的,与时区无关。一般情况下浏览器会判断你所在的时区,然后按照当前时区展示。如果想要设置为某个时区展示,下面的代码可以实现
// 在调用前设置,或者初始化项目的时候设置
moment.tz.setDefault("America/New_York");
2. Numeraljs
这个库在处理金钱,或者数字格式化的时候用的非常顺手,官网文档。
引入使用
const numeral = require('numeral');
基本用法,每3位逗号分隔,保留两位小数;
const string = numeral(1000).format('0,0');
// '1,000'
const string = numeral(1000).format('0,0.00');
// '1,000.00'
3. Lodash
这个不多介绍了,很好很全面的一个工具库,官方文档
4. react-draggable
这是个npm包,之前一个项目在做可自由拖动的组件时,自己监听了一大堆东西然后用起来还不是很方便,最后果断去npms一搜,实现比较好的就是这个包react-draggable简单实用。链接
import React from 'react';
import ReactDOM from 'react-dom';
import Draggable from 'react-draggable';
class App extends React.Component {
eventLogger = (e: MouseEvent, data: Object) => {
console.log('Event: ', e);
console.log('Data: ', data);
};
render() {
return (
<Draggable
axis="x"
handle=".handle"
defaultPosition={{x: 0, y: 0}}
position={null}
grid={[25, 25]}
scale={1}
onStart={this.handleStart}
onDrag={this.handleDrag}
onStop={this.handleStop}>
<div>
<div className="handle">Drag from here</div>
<div>This readme is really dragging on...</div>
</div>
</Draggable>
);
}
}
ReactDOM.render(<App/>, document.body);
他这个API文档不是很全,使用的时候有疑惑可以去翻翻源码;
5. styled-components
这是个典型的css in js 的一个类库,可以使用变量,循环等常规的js能力。尤其是在微前端的应用场景下,不会因为css文件的问题引起各子应用的样式错乱问题。文档地址
使用方法官方的文档里介绍的非常清楚。这里提醒两点
-
styled-component提供了一个设置全局样式的api:
createGlobalStyle,一般情况下使用此api来覆盖页面的全局样式,比如说提示框的样式。但是使用的时候注意要在最外层组件使用,否则组件每更新一次就会重新加载这个全局样式,页面体验很不友好; -
刚开始使用时请安装对应的插件使用,提高代码效率,毕竟没有提示来写css还是有点痛苦的;
6. classnames
这是一个与className打交道的库,相信大家在开发中都会遇到这样的问题,组件不同状态下会有不同的样式或者行为,需要命名不同的类名,同时还要支持传入自定义类名。一般情况下会在标签里做一些三目运算或者直接利用js来添加或删除类名,这样又麻烦又难维护。使用classnames轻松解决;
import React, {Compoinent} from 'react';
import cx from 'classnames';
export default class Demo extends Component {
render() {
const {className, disabled} = this.props;
return (
<a className={cx({
[className]:!!className,
'link-disable': !!disabled,
})}
>
Click Me
</a>)
}
}
这样既可以接受传下来的类名也可以根据自己的状态来切换类名