0.0.32 • Published 2 months ago

kn-hooks v0.0.32

Weekly downloads
-
License
-
Repository
-
Last release
2 months ago

kn-hooks

目录

使用方法

npm i kn-hooks
// 务必使用 {指定模块名} 来引用触发tree-shake 
import {useClipboard} from 'kn-hooks';

const Index=()=>{
  const clip = useClipboard();
}

按需打包

webpack4及以上版本无需下面配置

webpack增加bable-plugin-import插件,给babel plugins增加配置

//  rules: [
//     {
//       test: /\.js[x]?$/,
//       exclude: /node_modules/,
//       use: {
//         loader:'babel-loader',
//         options:{
//           plugins: [
              [
                import, { 
                  libraryName: "kn-hooks" ,
                  camel2DashComponentName:false,
                  libraryDirectory:"src",
                }
              ]
//           ]
//         }
//       }
//     }
//  ]

API

G useClipboard

M useClipboard(props) ⇒ UseClipboardResult

剪贴板工具

Demo - CodeSandBox

ParamTypeDescription
propsObject-
props.onSuccesscallback成功复制到剪贴板后的回调 ()=>void

Example

const clipboard= useClipboard();
const onCopy=()=>{
  clipboard.copy('text',()=>{console.log('success')})
}

T FunCopy : callback

复制函数

Properties

NameTypeDescription
textstring需要被复制的字符串
onCurSuccesscallback复制成功的回调 ()=>void

T UseClipboardResult : Object

UseClipboardResult返回的hook

Properties

NameTypeDescription
copyFunCopy触发复制字符串的函数

G useCounter

M useCounter() ⇒ UseCounterResult

加法计数器

Example

const counter= useCounter();
const onAdd=()=>{counter.addCount()}
return <span>当前计数器:{counter.count}</span>

T UseCounterResult

Properties

NameTypeDescription
reqObject
req.countnumber当前计数器的值
req.addCountfunction计数器的值+1。 ()=>void

G useDictionary

M SetConfig(params) ⇒ void

全局设置SelectOption和RadioOption

ParamTypeDescription
paramsObject
params.SelectOptionReactDomAntd的SelectOption组件
params.RadioOptionReactDomAntd的SelectOption组件

Example

import {useDictionary} from 'kn-hooks';
  import {Select,Radio} from 'antd';
  useDictionary.SetConfig(Select.Option,Radio.Option);

M createDictionary(options) ⇒ callback

创建字典hooks工具

ParamTypeDefaultDescription
optionsObject
options.apiApi用于获取字典列表的接口
options.idKeystring"'id'"字段id的key键值
options.nameKeystring"'name'"字段name的key键值
options.labelKeystring"'label'"字段label的key键值
options.SelectOptionReactDom指定\<Select.Option>对象是谁
options.RadioOptionReactDom指定\<Radio.Button>对象是谁
options.beforeApicallback(request:object)=>object 接口调用前的参数拦截器
options.afterApicallback(reponse:object)=>object[] 接口调用后的拦截器
options.defaultTypesArray.<DictionaryItem>如果字典不是通过api获取,可以在这里设置字典的内容

Example

// emUserType.jsx
    import {useDictionary} from 'kn-hooks';
  export const userType = useDictionary.createDictionary({
    api:()=>Promise.resolve([{id:'1001',label:'项目1001',name:'pm1001'},]),
    afterApi:(response)=>{
      return response?.data;
    }
  });
  // index.jsx
  import {userType} from './emUserType.jsx'
  const Page=()=>{
    const emUserType = userType();
    return (
      <section>
        <Select defaultValue={emUserType.getId('项目1001')}>
        {emUserType.selectOptions}
        </Select>
      </section>
    )
  }

M useDictionary(props) ⇒ UseDictionaryResult

字典管理

Demo - CodeSandBox

ParamTypeDefaultDescription
propsObject
props.apiApi用于获取字典列表的接口
props.idKeystring"'id'"字段id的key键值
props.nameKeystring"'name'"字段name的key键值
props.labelKeystring"'label'"字段label的key键值
props.SelectOptionReactDom指定\<Select.Option>对象是谁
props.RadioOptionReactDom指定\<Radio.Button>对象是谁
props.beforeApicallback(request:object)=>object 接口调用前的参数拦截器
props.afterApicallback(reponse:object)=>object[] 接口调用后的拦截器
props.defaultTypesArray.<DictionaryItem>如果字典不是通过api获取,可以在这里设置字典的内容

Example

import {Select,Radio} from 'antd';
import useDictionary,{SetConfig} from '@/useDictionary';
SetConfig({SelectOption:Select.Option,RadioOption:Radio.Button});

const Index=()=>{

  const emCity = useDictionary({
    api:()=>{
        return new Promise(resolve=>{
          resolve({
            code:0,
            data:{
              body:[
                {id:1,name:'shanghai',label:'上海'},
                {id:2,name:'beijing',label:'北京'},
                {id:3,name:'guangzhou',label:'广州'}
              ]
            }
          })
        })
      }
  });

  return (
    <section >
      <Select defaultValue={1}>
        {
          emCity.selectOptions
        }
      </Select>
      <p>分割线</p>
      <Radio.Group defaultValue={1}>
        {
          emCity.radioOptions
        }
      </Radio.Group>
    </section>
  )
}

T Api ⇒ Object

Properties

NameTypeDescription
paramsObject调用接口用到的参数

T DictionaryItem

Properties

NameTypeDescription
idstring数据唯一ID
namestring数据唯一id对应的别名
labelstring展示给用户看的文字

T UseDictionaryResult

Properties

NameTypeDescription
typesArray.<DictionaryItem>字典数据列表
selectOptionsArray.<ReactDOM>供Antd渲染\<Select>的列表
radioOptionsArray.<ReactDOM>供Antd渲染\<Radio>的列表
getIdfunction(labelOrName:string)=>string,搜索字典项中,label或name匹配labelOrName的项目,返回其id的值
getNamefunction(id:string)=>string,搜索字典项中,id匹配id的项目,返回其name的值
getLabelfunction(id:string)=>string,搜索字典项中,id匹配id的项目,返回其label的值
reloadfunction()=>void,重新调用字典接口刷新字典列表

G usePagination

M usePagination(props) ⇒ UsePaginationResult

分页管理器

Version: 1.0.0

ParamTypeDescription
propsObject
props.serviceFunServices发送请求的方法
props.paginationPagination默认分页信息

Example

// 移动端滚动加载案例
  const page = usePagination({
    service:GET_LIST,
    pagination:{pageSize:10},
  });

  useEffect(()=>{
    const fnFeforeService = (params)=>{
      // 假如你这里需要变更接口字段名称的话
      params.page=params.current;
      params.keyword='abc';
      return params;
    }
    
    const fnAfterService = (response)=>{
      // 这里你可以翻译及二次处理你的接口字段
      let req={
        code:response.errorCode
        data:response.list,
        page:response.pageInfo
      };
      return req;
    },

    page.addListener('beforeService',fnFeforeService);
    page.addListener('afterService',fnAfterService);
    return ()=>{
      page.removeListener('beforeService',fnFeforeService);
      page.removeListener('afterService',fnAfterService)
    }
  },[])

  const onReset=()=>{page.reset();}

  const onPageChange=()=>{
    let value=document.querySelector('#inputPage').value;
    page.update({pagination:{current:+value}})
  }
  const onNext=()=>{page.nextPage();}

  const renderTable=()=>{
    let renderData= [];
    page?.data?.forEach(list=>{
      renderData=[...renderData,...list];
    })
    
    return (
      <ul>
      {
        renderData?.map((item,idx)=>{
          return <li key={idx}>[{idx}]{item}</li>
        })
      }
      </ul>
    )
    
  }
  return (
    <ul>
    {renderTable()}
    </ul>
  )

M FunServices() ⇒ FunServicesCallback

分页请求接口格式要求

Properties

NameTypeDefaultDescription
currentnumber1页码
pageSizenumber10分页大小
...othersany其它接口附带参数

T FunServicesCallback : Object

分页接口请求结果

Properties

NameTypeDefaultDescription
codenumber0接口调用结果,0为成功
dataArray.<Object>分页数据
pageObject分页信息
page.currentnumber页码
page.pageSizenumber分页大小
page.totalnumber数据总量

T Pagination : Object

分页信息

Properties

NameTypeDefaultDescription
pageSizenumber20分页大小
currentnumber1当前页码
totalnumber1总记录数
startIdxnumber0当前页面下第一条数据的序号
moreboolean是否还有下一页

T PageDataResult : Object

分页数据结果

Properties

NameTypeDescription
paginationPagination最新分页信息
dataArray.<Array.<Object>>分页数据集合

T FunUpdate ⇒ Promise.<PageDataResult>

分页查询结果

Returns: Promise.<PageDataResult> - 最新的分页数据结果
Properties

NameTypeDescription
paginationPagination最新分页信息
clearboolean是否清空数据

T UsePaginationResult : Object

usePagination的返回对象

Properties

NameTypeDescription
dataArray.<Array.<Object>>分页数据集合
paginnationPagination分页信息
updateFunUpdate查询方法
nextFunUpdate获取下一页数据
addListenerfunction监听事件 (type='beforeService''afterService',fn:FunListener)=>object
removeListenerfunction移除监听事件 (type,fn:FunListener)=>void

T FunListener ⇒ Object | Promise.<Object>

事件监听方法

Returns: Object | Promise.<Object> - 处理完毕的数据对象或者Promise
Properties

NameTypeDescription
paramsObject被拦截的数据对象

G usePaginationWithForm

M usePaginationWithForm(props)

支持Antd-Form的usePagination 作用是在查询接口前自动获取form表单内的字段,并作为接口查询参数进行查询 使用方法及参数字段参考 usePagination

ParamTypeDescription
propsObject
props.formObjectForm表单的ref,在接口调用前会校验获取form表单内的数据,提交到接口参数内查询

Example

const [form] = Form.useForm();
const page = usePaginationWithForm({
  service:GET_LIST,
  pagination:{pageSize:10},
  form:form
});

return(
  <Form form={form} style={{width:'600px'}} layout="inline">
    <Form.Item label='关键字' name='keyword' rules={[
      {
        max:5,
        message:'最多5个字符'
      }
    ]}>
      <Input />
    </Form.Item>
    <Button onClick={onSearch} type='primary'>查询</Button>
    <Button onClick={onReset} type='primary'>重置</Button>
  </Form>
)

G useSwitch

useSwitch

M useSwitch(props) ⇒ UseSwitchResult

控制开关

Demo-CodeSandbox

ParamTypeDefaultDescription
propsbooleanfalse默认的开关状态

T UseSwitchResult : Object

useSwitchHookResult

Properties

NameTypeDescription
stateboolean当前开关状态
countnumber当前开关计数器
openfunction切换至开模式 (force?:boolean)=>void
closefunction切换至关模式 (force?:boolean)=>void
togglefunction切换至反向模式 ()=>void
0.0.32

2 months ago

0.0.31

9 months ago

0.0.20

1 year ago

0.0.21

1 year ago

0.0.22

1 year ago

0.0.23

1 year ago

0.0.24

1 year ago

0.0.25

1 year ago

0.0.30

1 year ago

0.0.26

1 year ago

0.0.27

1 year ago

0.0.28

1 year ago

0.0.29

1 year ago

0.0.10

1 year ago

0.0.11

1 year ago

0.0.12

1 year ago

0.0.13

1 year ago

0.0.14

1 year ago

0.0.15

1 year ago

0.0.16

1 year ago

0.0.17

1 year ago

0.0.18

1 year ago

0.0.19

1 year ago

0.0.9

2 years ago

0.0.8

2 years ago

0.0.7

3 years ago

0.0.6

3 years ago

0.0.5

3 years ago

0.0.4

3 years ago

0.0.3

3 years ago

0.0.2

3 years ago