From 2ed7f05fa69e5fcba5248691165230de719c3c3d Mon Sep 17 00:00:00 2001 From: innocces <18435105624@163.com> Date: Mon, 12 Jul 2021 22:12:33 +0800 Subject: [PATCH] docs(userequest): add custom request to docs --- packages/app/package.json | 2 + packages/app/src/app.config.ts | 6 +- .../pages/useRequest/axios/index.config.ts | 3 + .../app/src/pages/useRequest/axios/index.tsx | 41 ++++++++++++ .../pages/useRequest/fetch/index.config.ts | 3 + .../app/src/pages/useRequest/fetch/index.tsx | 28 ++++++++ packages/app/src/pages/useRequest/index.tsx | 20 ++++++ .../useRequest/loadingDelay/index.config.ts | 3 + .../pages/useRequest/loadingDelay/index.tsx | 57 ++++++++++++++++ .../useRequest/refreshDeps/index.config.ts | 3 + .../pages/useRequest/refreshDeps/index.tsx | 66 +++++++++++++++++++ packages/hooks/src/useRequest/index.md | 24 +++++++ 12 files changed, 255 insertions(+), 1 deletion(-) create mode 100644 packages/app/src/pages/useRequest/axios/index.config.ts create mode 100644 packages/app/src/pages/useRequest/axios/index.tsx create mode 100644 packages/app/src/pages/useRequest/fetch/index.config.ts create mode 100644 packages/app/src/pages/useRequest/fetch/index.tsx create mode 100644 packages/app/src/pages/useRequest/loadingDelay/index.config.ts create mode 100644 packages/app/src/pages/useRequest/loadingDelay/index.tsx create mode 100644 packages/app/src/pages/useRequest/refreshDeps/index.config.ts create mode 100644 packages/app/src/pages/useRequest/refreshDeps/index.tsx diff --git a/packages/app/package.json b/packages/app/package.json index 8df0c5143..28127ff06 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -41,6 +41,8 @@ "@tarojs/react": "3.2.15", "@tarojs/runtime": "3.2.15", "@tarojs/taro": "3.2.15", + "axios": "^0.21.1", + "axios-miniprogram-adapter": "^0.3.2", "lodash": "4.17.15", "mockjs": "^1.1.0", "react": "^17.0.2", diff --git a/packages/app/src/app.config.ts b/packages/app/src/app.config.ts index 8eca411be..efdcc774c 100644 --- a/packages/app/src/app.config.ts +++ b/packages/app/src/app.config.ts @@ -26,7 +26,11 @@ export default { 'pages/useRequest/cacheKey/index', 'pages/useRequest/preload/index', 'pages/useRequest/refreshOnWindowFocus/index', - // 'pages/useRequest/mutate/index', + 'pages/useRequest/mutate/index', + 'pages/useRequest/loadingDelay/index', + 'pages/useRequest/refreshDeps/index', + 'pages/useRequest/fetch/index', + 'pages/useRequest/axios/index', 'pages/useNetworkType/index', 'pages/useOnline/index', ], diff --git a/packages/app/src/pages/useRequest/axios/index.config.ts b/packages/app/src/pages/useRequest/axios/index.config.ts new file mode 100644 index 000000000..572932614 --- /dev/null +++ b/packages/app/src/pages/useRequest/axios/index.config.ts @@ -0,0 +1,3 @@ +export default { + navigationBarTitleText: 'useRequest requstMethod', +}; diff --git a/packages/app/src/pages/useRequest/axios/index.tsx b/packages/app/src/pages/useRequest/axios/index.tsx new file mode 100644 index 000000000..0d86267d7 --- /dev/null +++ b/packages/app/src/pages/useRequest/axios/index.tsx @@ -0,0 +1,41 @@ +/** + * desc: 通过设置 `requstMethod`, 可以使用自己的请求库。 + */ +import React from 'react'; +import { useRequest } from 'taro-hooks'; +import axios from 'axios/dist/axios.min.js'; +import adapter from 'axios-miniprogram-adapter'; + +import { View } from '@tarojs/components'; +import DocPage from '@components/DocPage'; + +const requestMethod = axios.create( + process.env.TARO_ENV === 'h5' + ? {} + : { + adapter, + }, +); + +const MethodRequest = () => { + const { data, error, loading } = useRequest( + 'https://run.mocky.io/v3/cd8e3926-740c-4a2c-ab80-45c0c4fe8dd2', + { + requestMethod: (param: any) => requestMethod(param), + }, + ); + + return ( + + + {error + ? 'failed to load' + : loading + ? 'loading...' + : 'responese:' + JSON.stringify(data?.data)} + + + ); +}; + +export default MethodRequest; diff --git a/packages/app/src/pages/useRequest/fetch/index.config.ts b/packages/app/src/pages/useRequest/fetch/index.config.ts new file mode 100644 index 000000000..70499e092 --- /dev/null +++ b/packages/app/src/pages/useRequest/fetch/index.config.ts @@ -0,0 +1,3 @@ +export default { + navigationBarTitleText: 'useRequest 默认请求库', +}; diff --git a/packages/app/src/pages/useRequest/fetch/index.tsx b/packages/app/src/pages/useRequest/fetch/index.tsx new file mode 100644 index 000000000..6459f6260 --- /dev/null +++ b/packages/app/src/pages/useRequest/fetch/index.tsx @@ -0,0 +1,28 @@ +/** + * desc: 如果 useRequest 第一个参数是 `string`、`object` 或 `()=> string|object`,则默认使用 Taro.request 发送网络请求 + */ +import React from 'react'; +import { useRequest } from 'taro-hooks'; + +import { View } from '@tarojs/components'; +import DocPage from '@components/DocPage'; + +const FetchRequest = () => { + const { data, error, loading } = useRequest( + 'https://run.mocky.io/v3/cd8e3926-740c-4a2c-ab80-45c0c4fe8dd2', + ); + + return ( + + + {error + ? 'failed to load' + : loading + ? 'loading...' + : 'responese:' + JSON.stringify(data?.data)} + + + ); +}; + +export default FetchRequest; diff --git a/packages/app/src/pages/useRequest/index.tsx b/packages/app/src/pages/useRequest/index.tsx index ba4bb80f1..b1bcc104c 100644 --- a/packages/app/src/pages/useRequest/index.tsx +++ b/packages/app/src/pages/useRequest/index.tsx @@ -68,6 +68,26 @@ const list: IListItem[] = [ note: '你可以通过 mutate ,直接修改 data 。 mutate 函数参数可以为 newData 或 (oldData)=> newData 。', route: 'mutate', }, + { + title: 'Loading Delay', + note: '通过设置 options.loadingDelay ,可以延迟 loading 变成 true 的时间,有效防止闪烁。', + route: 'loadingDelay', + }, + { + title: 'refreshDeps', + note: '当 options.refreshDeps 变化时,useRequest 会使用之前的参数重新执行 service。', + route: 'refreshDeps', + }, + { + title: '默认请求库', + note: '如果 useRequest 第一个参数是 string、object 或 ()=> string|object,则默认使用 Taro.request 发送网络请求', + route: 'fetch', + }, + { + title: '集成请求库', + note: '通过设置 requstMethod, 可以使用自己的请求库。', + route: 'axios', + }, ]; export default () => { diff --git a/packages/app/src/pages/useRequest/loadingDelay/index.config.ts b/packages/app/src/pages/useRequest/loadingDelay/index.config.ts new file mode 100644 index 000000000..946e2d15b --- /dev/null +++ b/packages/app/src/pages/useRequest/loadingDelay/index.config.ts @@ -0,0 +1,3 @@ +export default { + navigationBarTitleText: 'useRequest Loading Delay', +}; diff --git a/packages/app/src/pages/useRequest/loadingDelay/index.tsx b/packages/app/src/pages/useRequest/loadingDelay/index.tsx new file mode 100644 index 000000000..3bce68e82 --- /dev/null +++ b/packages/app/src/pages/useRequest/loadingDelay/index.tsx @@ -0,0 +1,57 @@ +/** + * desc: 通过设置 `options.loadingDelay` ,可以延迟 `loading` 变成 `true` 的时间,有效防止闪烁。 + */ +import React from 'react'; +import { useRequest } from 'taro-hooks'; + +import { AtButton } from 'taro-ui'; +import { View } from '@tarojs/components'; +import DocPage from '@components/DocPage'; + +async function getCurrentTime(): Promise { + return new Promise((resolve) => { + setTimeout(() => { + resolve(new Date().getTime()); + }, 100); + }); +} + +const LoadingDelayRequest = () => { + const getTimeAction = useRequest(getCurrentTime); + + const withLoadingDelayAction = useRequest(getCurrentTime, { + loadingDelay: 200, + }); + + const trigger = () => { + getTimeAction.run(); + withLoadingDelayAction.run(); + }; + + return ( + + + loadingDelay can set delay loading, which can effectively prevent + loading from flickering. + + + run + + + Current Time: {getTimeAction.loading ? 'loading' : getTimeAction.data} + + + Current Time:{' '} + {withLoadingDelayAction.loading + ? 'loading' + : withLoadingDelayAction.data} + + + ); +}; + +export default LoadingDelayRequest; diff --git a/packages/app/src/pages/useRequest/refreshDeps/index.config.ts b/packages/app/src/pages/useRequest/refreshDeps/index.config.ts new file mode 100644 index 000000000..68ada9cb7 --- /dev/null +++ b/packages/app/src/pages/useRequest/refreshDeps/index.config.ts @@ -0,0 +1,3 @@ +export default { + navigationBarTitleText: 'useRequest refreshDeps', +}; diff --git a/packages/app/src/pages/useRequest/refreshDeps/index.tsx b/packages/app/src/pages/useRequest/refreshDeps/index.tsx new file mode 100644 index 000000000..b5c717543 --- /dev/null +++ b/packages/app/src/pages/useRequest/refreshDeps/index.tsx @@ -0,0 +1,66 @@ +/** + * desc: 当 `options.refreshDeps` 变化时,useRequest 会使用之前的参数重新执行 service。 + */ +import React, { useState } from 'react'; +import { useRequest } from 'taro-hooks'; + +import { AtButton, AtActionSheet, AtActionSheetItem } from 'taro-ui'; +import { View } from '@tarojs/components'; +import DocPage from '@components/DocPage'; + +const userSchool = (id: string) => { + switch (id) { + case '1': + return 'Tsinghua University'; + case '2': + return 'Beijing University'; + case '3': + return 'Zhejiang University'; + default: + return ''; + } +}; + +async function getUserSchool(userId: string): Promise { + return new Promise((resolve) => { + setTimeout(() => { + resolve(userSchool(userId)); + }, 1000); + }); +} + +const RefreshDepsRequest = () => { + const [userId, setUserId] = useState('1'); + const [isOpened, changeIsOpened] = useState(false); + const { data, loading } = useRequest(() => getUserSchool(userId), { + refreshDeps: [userId], + }); + + return ( + + changeIsOpened(true)} + customStyle={{ margin: '10px 0' }} + > + 点击更改userId: {userId} + + School: {loading ? 'loading' : data} + changeIsOpened(false)}> + {['1', '2', '3'].map((v) => ( + { + setUserId(v); + changeIsOpened(false); + }} + key={v} + > + user {v} + + ))} + + + ); +}; + +export default RefreshDepsRequest; diff --git a/packages/hooks/src/useRequest/index.md b/packages/hooks/src/useRequest/index.md index c575b54f2..4a66dd087 100644 --- a/packages/hooks/src/useRequest/index.md +++ b/packages/hooks/src/useRequest/index.md @@ -107,6 +107,26 @@ const { data, error, loading, run, params, cancel, refresh, mutate, fetches } = +### Loading Delay + + + +### refreshDeps + +当某些`state`变化时,我们需要重新执行异步请求,一般我们会这样写代码: + +```javascript +const [userId, setUserId] = useState('1'); +const { data, run, loading } = useRequest(() => getUserSchool(userId)); +useEffect(() => { + run(); +}, [userId]); +``` + +`refreshDeps`是一个语法糖,让你更方便的实现上面的功能。当`refreshDeps`变化时,会使用之前的`params`重新执行`service`。 + + + ## 返回值说明 | 参数 | 说明 | 类型 | @@ -184,6 +204,10 @@ const { loading, run } = useRequest( ); ``` + + + + #### API ```typescript