$ cnpm install @uyun/utils
Common utils for Uyun
集成常用的工具库,简化使用方法。本工具库对部分库进行了封装,请仔细查看文档及使用说明。
基于 axios 封装,集成了默认配置、自动取消和自动添加时间戳防止缓存的功能。
import axios from '@uyun/utils/request'
import { Router } from 'react-router-dom'
import { createHashHistory } from 'history'
const history = createHashHistory()
const request = axios.create({
baseURL: '/api',
history
})
request.interceptors.response.use(res => res.data, error => {
if (axios.isCancel(error)) {
console.log('Request canceled: ', error.message);
} else {
...
}
return Promise.reject(error)
})
...
<Router history={history}>
</Router>
...
默认加入了如下配置:
{
headers: {
common: {
'Content-Type': 'application/json; charset=utf-8'
}
}
}
如果创建 axios
实例时传入了 history
对象,将开启路由跳转时自动取消请求的功能,适用于解决用户在快速跳转路由时引起的数据问题。
import request from './request'
request.get('/user/12345')
.then(res => {
...
})
request.post('/user/12345', { foo: 'bar' })
.then(res => {
...
})
// 路由跳转时将取消当前页面所发送且未返回信息的请求
history.push('/list')
// Request canceled: Auto-cancel
// Request canceled: Auto-cancel
某些特殊情况下不希望请求自动取消,可以指定某个请求关闭此功能。
import request from './request'
request.get('/user/12345', { cancel: false })
.then(res => {
...
})
request.post('/user/12345', { foo: 'bar' }, { cancel: false })
.then(res => {
...
})
// 路由跳转时不会取消这两个请求
history.push('/list')
恢复 request
实例后,不再具有自动取消功能。
request.restore()
默认自动在每个请求中添加当前时间戳,防止请求被浏览器缓存。
// 等同于
request.get('/list', {
config: {
params: {
_: Date.now()
}
}
})
在创建实例时关闭。
axios.create({
timestampParams: false
})
使用 eject
方法关闭。
request.interceptors.request.eject(request.timestampParamsInterceptor)
基于 axios-mock-adapter 封装,覆盖了默认的延迟响应时间。
原生 axios-mock-adapter
默认没有延迟响应时间,需要手动设置。封装后默认 delayResponse
为 500ms
,更符合实际应用场景。
import MockAdapter from '@uyun/utils/mock'
import request from './request'
const mock = new MockAdapter(request)
mock
.onGet(...).reply(...)
.onAny().passThrough()
const mock = new MockAdapter(request, {
delayResponse: 1000
})
基于 everest-i18n 封装,默认从 cookie
读取语言或中文 zh_CN
。
直接配置了语言并生成实例,导入多语言文本后,可直接在组件中引用 i18n
或 __
方法并使用。
// index.js
import { intl } from '@uyun/utils/i18n'
import locale from './locale.json'
intl.merge(locale)
// Component.jsx
import __ from '@uyun/utils/i18n'
__('name', '名字')
__('total', '共 {total} 条', { total: 500 })
基于 qs 封装,qs.parse
默认无视 querystring 中的问号。
原生 qs
默认需要手动指定 { ignoreQueryPrefix: true }
。封装后覆盖了默认值为 true
,更符合实际应用场景。
import qs from '@uyun/utils/qs'
window.location.href
// ?a=1&b=2
qs.parse(window.location.href)
// { a: 1, b: 2 }
qs.stringify({ a: 1, b: 2 })
// a=1&b=2
即 js-cookie。
import cookie from '@uyun/utils/cookie'
cookie.get('name')
cookie.set('name', 'value', { expires: 7, path: '/' })
即 js-base64。
import base64 from '@uyun/utils/base64'
base64.encode('key')
// a2V5
base64.encodeURI('/url')
// L3VybA==
base64.decode('a2V5')
// key
即 node-uuid。
import uuid from '@uyun/utils/uuid'
uuid()
// '3b99e3e0-7598-11e8-90be-95472fb3ecbd'
Copyright 2013 - present © cnpmjs.org