React Hooks
为了客户端开发方便,我们专门开发了一套 React hooks 库:rxmodels-swr,用于操作 rxModels 服务端数据。
rxmodels-swr 基于SWR 跟 axios实现,使用它,可以使用 SWR、axios 的所有特性来跟 rxModels 服务端交互。
#
安装执行下面的命令,直接从 npmjs 上引入包即可。
npm install @rxdrag/rxmodels-swr
#
初始化如果您的项目是通过 Create React App 创建的,那么直接在 App.tsx
文件中引入一下代码
import { initRxModelsSwr } from '@rxdrag/rxmodels-swr';... initRxModelsSwr({ //rxModels服务端URL serverUrl: 'http://localhost:3001/', //登录路由,如果服务端返回401错误,会自动跳到该路由 loginUrl: '/login', //浏览器localStorage存储验证token的名字,一般结合登录时的“记住我”功能使用 tokenName: 'RxModelsToken', });...
initRxModelsSwr 接受一个 RxModelsSwrConfig 对象做参数,它有以下属性
interface RxModelsSwrConfig { serverUrl?: string; loginUrl?: string, tokenName?: string, //服务端验证token,可在登录后传入 token?: string,}
#
rxModelsSwrConfig全局对象一个全局对象,用于存储基本配置,初始值如下
export const rxModelsSwrConfig: RxModelsSwrConfig = { serverUrl: 'http://localhost:3001/', loginUrl: '/login', tokenName: 'RxModelsToken', token: '',}
您可以在任何时候修改这个对象的属性。
#
useSWRQuery通过axios格式参数查询数据,对 useMagicQuery 提供底层支持。
const { data, error, loading, mutate } = useSWRQuery(axiosConfig, options)
#
参数axiosConfig
: 一个axios请求配置options
:(可选)useSwr的Options + onError、onCompleted两个回调函数
#
返回值data
: 查询获得的数据error
: axios 抛出的错误(或者是 undefined)loading
: 正在等待结果返回isValidating
: 是否有请求或重新验证加载mutate(data?, shouldRevalidate?)
: 更改缓存数据的函数
除了loading
,其它跟useSWR
返回值完全一致。
#
选项onCompleted
: 查询成功的回调函数onError
: 查询失败的回调函数
其他选项跟useSWR
完全一致,若要进一步了解,请查阅它的文档。
#
useMagicQuery通过接口 /get/...
查询数据,可以利用SWR缓存机制,基于URL进行缓存。
const { data, error, loading, mutate } = useMagicQuery(querybuilder, options)
#
参数querybuilder
: 查询构建器MagicQueryBuilder
options
:(可选)useSwr的Options + onError、onCompleted两个回调
#
返回值data
: 查询获得的数据,类型是QueryResult<T>{data:T;pagination?:Paginator;}
- 其它同 useSWRQuery
#
选项跟接口 useSWRQuery 相同。
#
useMagicQueryInfinite无限加载时使用,底层使用useSWRInfinite
实现。
const { data, error, loading, isValidating, mutate, size, setSize } = useMagicQueryInfinite(getKey, options)
#
参数- getKey: 一个函数,接受索引和上一页数据,返回页面的 key
- options: 跟 useMagicQuery 接口一致
#
返回值data
: 一个数组,每个页面请求的响应值error
: 与 useMagicQuery 的 error 返回值相同loading
: 请求中,等待返回结果isValidating
: 与 useMagicQuery 的 isValidating 返回值相同mutate
: 和 useMagicQuery 的绑定 mutate 函数一样,但是操作 data 数组size
: 即将请求和返回的页面数setSize
: 设置需要请求的页面数
#
useLazyAxios通过axios发送一个延时请求。
const [excute, { data, loading, error }] = useLazyAxios<T>(axiosConfig, options)
#
参数axiosConfig
: 一个axios请求配置options
: onError、onCompleted两个回调
#
返回值excute
: 执行函数,马上提交数据,接受参数:AxiosRequestConfig的一个片段data
: 执行成功的返回数据loading
: 正在请求,等待返回结果error
: axios返回的错误
#
参数onError
:(error:DataError) => void
onCompleted
:(data:T) => void
#
useLazyMagicPost使用 /post
接口向 rxModels 服务器延时提交数据。
const [excute, { data, loading, error }] = useLazyMagicPost<T>(options)
#
返回值excute
: 执行函数,马上提交数据,接受参数:AxiosRequestConfig的一个片段data
: 执行成功的返回数据loading
: 正在请求,等待返回结果error
: axios返回的错误
#
参数onError
:(error:DataError) => void
onCompleted
:(data:T) => void
#
excute 函数参数接受AxiosRequestConfig一个片段,实际使用中,结合MagicPostBuilder,仅需要设置data项即可
excute({data:postBuilder.toData()});
#
useLazyMagicUpdate使用 /upate
接口向 rxModels 服务器延时提交数据。
const [excute, { data, loading, error }] = useLazyMagicUpdate<T>(options)
#
返回值excute
: 执行函数,马上提交数据,接受参数:AxiosRequestConfig的一个片段data
: 执行成功的返回数据loading
: 正在请求,等待返回结果error
: axios返回的错误
#
参数onError
:(error:DataError) => void
onCompleted
:(data:T) => void
#
excute 函数参数接受AxiosRequestConfig一个片段,实际使用中,结合MagicUpdateBuilder,仅需要设置data项即可
excute({data:updateBuilder.toData()});
#
useLazyMagicDelete使用 /delete
接口向 rxModels 服务器延时提交数据。
const [excute, { data, loading, error }] = useLazyMagicDelete<T>(options)
#
返回值excute
: 执行函数,马上提交数据,接受参数:AxiosRequestConfig的一个片段data
: 执行成功的返回数据loading
: 正在请求,等待返回结果error
: axios返回的错误
#
参数onError
:(error:DataError) => void
onCompleted
:(data:T) => void
#
excute 函数参数接受AxiosRequestConfig一个片段,实际使用中,结合MagicDeleteBuilder,仅需要设置data项即可
excute({data:deleteBuilder.toData()});
#
useLazyMagicUpload(待开发)使用 /upload
接口向 rxModels 服务器延时提交数据。
const [excute, { data, loading, error }] = useLazyMagicUpload<T>(options)
#
返回值excute
: 执行函数,马上提交数据,接受参数:AxiosRequestConfig的一个片段data
: 执行成功的返回数据loading
: 正在请求,等待返回结果error
: axios返回的错误
#
参数onError
:(error:DataError) => void
onCompleted
:(data:T) => void
#
excute 函数参数接受AxiosRequestConfig一个片段,实际使用中,结合MagicUploadBuilder,仅需要设置data项即可
excute({data:uploadBuilder.toData()});
#
MagicQueryBuilder构建接口 /get
需要的参数,直接这些参数编码成符合 url 格式的字符串。
#
方法setEntity
: 设置要查询的实体名setQueryString
: 传入查询字符串,字符串会被解析并跟其他接口结合使用setTake
: 设置要获取的记录数setSkip
: 设置要跳过的记录数setGetMany
: 取多条记录setGetOne
: 只取一条记录addCondition
: 添加查询条件addRelation
: 添加一个关联addEntityDirective
: 添加Entity级别的指令setTreeDirective
: 添加tree指令,以属性结构返回结果setOrderByASC
: 添加升序字段setOrderByDESC
: 添加降序字段setOrderBy
: 添加排序字段,第二个参数代表顺序setPageSize
: 设置分页大小,调用该方法后会添加@paginate指令setPageIndex
: 设置页码,调用该方法后会添加@paginate指令setWhereSql
: 添加 SQL 格式的查询条件toAxioConfig
: 输出 AxiosRequestConfigtoUrl
: 输出 url
#
MagicPostBuilder构建接口 /post
需要的参数。尚未实现在关联上添加指令的功能。
#
方法setEntity
: 设置要修改的实体名setSingleData
: 仅修改或者插入一条数据,设置这条数据addEntityDirective
: 在实体上添加指令setDatas
: 设置全部数据addData
: 添加一条数据toData
: 转成可供axios提交的data
#
MagicUpdateBuilder构建接口 /update
需要的参数
#
方法setEntity
: 设置要修改的实体名setIds
: 设置全部要修改的实例IDaddId
: 添加一个要修改的实例IDsetParams
: 要修改的数据片段,格式如{name:'you name', email:'waterli@rxdrag.com'}
toData
: 转成可供axios提交的data
#
MagicDeleteBuilder构建接口 /delete
需要的参数
#
方法setEntity
: 设置要修改的实体名setIds
: 设置全部要修改的实例IDaddId
: 添加一个要修改的实例IDaddCascade
: 设置cascade指令toData
: 转成可供axios提交的data
#
MagicUploadBuilder构建接口 /upload
需要的参数
#
方法setEntity
: 设置要修改的实体名setData
: 设置要创建的数据RxMedia数据setFile
: 设置要上传的文件toData
: 转成可供axios提交的FormData