npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@magic_npm/simple-tools

v0.2.0

Published

`simple-tools` is a simple set of tools

Downloads

177

Readme

simple-tools 介绍

simple-tools 是一个工具集,目前有useDatauseApi两个方法,用于提高代码质量下限,减少bug率,提升开发效率

安装

npm

npm i @magic_npm/simple-tools

yarn

yarn add @magic_npm/simple-tools

1. useData 方法

用于声明数据模型,重置/合并数据,规范代码块;适用场景:重置查询条件、重置表单数据等;

import { useData } from 'simple-tools'
// data 为声明的数据,merge 为合并数据的方法
const [data, merge] = useData(() => {
    name: '',
    mobile: ''
})
merge({ name: 'name_tst' })    // 等同于 data.name = 'name_tst'
merge({}, true)    // data 数据重置,回到声明数据时的状态
merge() // 重置数据,与上一致

// vue 动态数据
const [dv, mergeDV] = useData(() => reactive({
    name: '',
    mobile: ''
}))
setTimeout(() => {
    mergeDV({ name: 'name_dv' })  
}, 1000)
dv.name  // 动态数据,页面会自动更新

// 内置方法
useData.getDataType(data.name)    // 获取数据类型
// useData.mergeData(object1, object2)    // 把object2 合并到 object1 上,此方法用于一些没有使用 useData 声明数据的场景

useData 参数

| 参数 | 返回值 | | - | :-: | | useData(func: () => object) | Array[object, merge:Function] |

useData 返回值: merge方法

| 参数 | 返回值 | 说明 | | - | :-: | - | | merge(object, boolean) | object | 当第二个参数为 true 时,会重置声明数据后,再合并object |

useData Methods

| 方法名 | 说明 | 参数 | | - | - | - | | getDataType | 获取数据类型 | useData.getDataType(data:any): string | | mergeData | 合并数据,将 object2 合并到 object1 上 | useData.mergeData(object1, object2): object1 |

2. useApi 方法

用于业务调用,包含接口调用、其它异步调用,整合代码块,提高易读性

// vue3 ts 例子 ————————
import { ref, reactive } from 'vue'
import { useData, useApi } from 'simple-tools'
const [query, mergeQuery] = useData(() => reactive({
    id: '',
    name: ''
}))
const [data, mergeData] = useData(() => reactive({
    name: '',
    mobile: ''
}))
// 场景一,普通调用
const [getData, loadingData] = useApi(() => new Promise(r => setTimeout(r, 1000)), {
    loading: ref(false),
    params: () => query,
    outputModel: (q) => ({ ...q, name: 'new_name' }),   // 修改一个参数,或者新增参数
    // 取到请求结果的data属性,也可以处理别的需求,保障返回的data就是直接可用的数据
    inputModel: (res: any) => res?.data,  
    success: (data, loadingKey, res) => {
        mergeData(data)
    }
})
getData()   // 调用
loadingData.value   // loading状态
// 场景二,阻止调用
const [getData, loadingData] = useApi(() => new Promise(r => setTimeout(r, 1000)), {
    loading: ref(false),
    params: () => query,
    before: () => {
        // to do...
        return Promise.reject() // 阻止调用,或者false也可以阻止
    },
    // 取到请求结果的data属性,也可以处理别的需求,保障返回的data就是直接可用的数据
    inputModel: (res: any) => res?.data,  
    success: (data, loadingKey, res) => {
        mergeData(data)
    }
})
getData()   // 调用
loadingData.value   // loading状态
// 场景三,一个调用多用途
const [getData, loadingData] = useApi(() => new Promise(r => setTimeout(r, 1000)), {
    loading: reactive({ data: false, load: false, refresh: false }),
    params: () => query,
    // 取到请求结果的data属性,也可以处理别的需求,保障返回的data就是直接可用的数据
    inputModel: (res: any) => res?.data,  
    success: (data, loadingKey, res) => {
        // 初次请求
        if (loadingKey === 'data') {
            mergeData(data)   
        } 
        // 下拉加载更多
        else if (loadingKey === 'load') {
            // to do
        } 
        // 刷新
        else if (loadingKey === 'refresh') {
            // to do
        }
    }
})
getData({}, 'data') // 默认加载数据
loadingData.data

getData({}, 'load') // 加载更多
loadingData.load

getData({}, 'refresh') // 刷新
loadingData.refresh
// 场景四,防止表单重复提交
const [getData, loadingData] = useApi(() => new Promise(r => setTimeout(r, 1000)), {
    isRepeat: false,    // 关闭重复调用,只有上一个调用结束后,才能发起新的调用
    loading: ref(false),
    params: () => query,
    outputModel: (q) => ({ ...q, name: 'new_name' }),   // 修改一个参数,或者新增参数
    // 取到请求结果的data属性,也可以处理别的需求,保障返回的data就是直接可用的数据
    inputModel: (res: any) => res?.data,  
    success: (data, loadingKey, res) => {
        mergeData(data)
    }
})
getData()   // 调用,上一次请求未结束前,再次调用无效
loadingData.value   // loading状态
// 场景五,单例模式调用
const [getData, loadingData] = useApi(() => new Promise(r => setTimeout(r, 1000)), {
    // 开启单例模式,第一次调用成功后(调用结果为err不算),后续的调用都取第一次调用的结果
    isSingle: true,
    loading: ref(false),
    params: () => query,
    outputModel: (q) => ({ ...q, name: 'new_name' }),   // 修改一个参数,或者新增参数
    // 取到请求结果的data属性,也可以处理别的需求,保障返回的data就是直接可用的数据
    inputModel: (res: any) => res?.data,  
    success: (data, loadingKey, res) => {
        mergeData(data)
    }
})
getData()   // 调用,上一次请求未结束前,再次调用无效
loadingData.value   // loading状态
// 场景六,提供关闭调用得 cancel 方法(提供了此方法,isCancel参数才能生效)
const [getData, loadingData] = useApi(() => {
    let t = 0
    const pm = new Promise(r => t = setTimeout(r, 1000))
    pm['cancel'] = () => clearTimeout(t) // 关闭请求的方法
    return pm
}, {
    loading: ref(false),
    params: () => query,
    // 取到请求结果的data属性,也可以处理别的需求,保障返回的data就是直接可用的数据
    inputModel: (res: any) => res?.data,  
    success: (data, loadingKey, res) => {
        mergeData(data)
    }
})
getData()   // 调用
loadingData.value   // loading状态

useApi 参数

| 参数 | 返回值 | | - | :-: | | useApi(() => Promise, options: object) | Array[apiFunc:Function, loading: object, apiObjStatus: object] |

useApi options

| 参数 | 说明 | 类型 | 可选值 | 默认值 | | - | - | :-: | :-: | :-: | | isCancel | 自动关闭历史异步请求,用于重复调用保留最新一次调用 | boolean | - | true | | isRepeat | 重复调用开关 | boolean | - | true | | isSignle | 单例模式,使用第一次调用的结果 | boolean | - | false | | loading | 调用状态,用于按钮等组件的loading效果 | object | - | - | | params | 调用参数数据声明 | () => params: object | - | - | | before | 返回false或Promise状态为rejeced会阻止调用 | (params) => boolean | void | Promise | - | - | | outputModel | 输出参数调整 | (params) => object | void | - | - | | inputModel | 获得数据后,输入数据调整 | (res) => data: object | - | - | | success | 调用成功 | (data, loadingKey, res) => void | - | - | | error | 调用失败 | (err) => void | - | - | | loadingStart | 调用过程状态: 开始 | (params, loadingKey) => LS | void | - | - | | loadingEnd | 调用过程状态: 结束 | (LS) => void | - | - |

useApi apiFunc

| 参数 | 返回值 | | - | :-: | | apiFunc(params | void, loadingKey) | { data: object, loadingKey: object, res: object } |

useApi apiObjStatus

| 参数 | 类型 | 说明 | | - | :-: | - | | status | number | 调用状态: 0 待调用, 1 调用中, 2 成功, 3 失败 | | sendNum | number | 调用次数记录 | | params | object | 调用参数数据 | | output | object | 调整后的输出参数数据 | | pm | Promise | 最新一次调用 | | err | Error | string | 调用错误 | | cancelApi | Function | 关闭正在调用的请求,关闭方法由pm<Promise['cancel']>提供,详见demo | | result | { data, loadingKey, res } | 调用结果 |