https://coding.imooc.com/learn/questiondetail/lz14NYLqGV2XK2p9.html 的延伸
来源:3-12 自定义 hook 第三部分 - 正确的方式完成 URLLoader

ywang04
2022-09-17
老师 我发现如果返回数组[data, loading] 会有如下问题
import { useState, useEffect } from 'react'; import axios from 'axios'; const useURLLoader = (url: string, deps: any[] = []) => { const [data, setData] = useState<any>(null); const [loading, setLoading] = useState(false); useEffect(() => { setLoading(true); axios.get(url).then((result) => { setData(result.data); setLoading(false); }); }, deps); return [data, loading]; }; export default useURLLoader;
loading也会被认为是any type, 如果是返回object {data, loading} 就没有这个问题
另外 为啥我没有判断 dogResult是否存在,编译器也没有报错。我用的是ts 4.8.2 版本
dogResult && dogResult.message
<img src={dogResult.message} alt="dog" />
写回答
1回答
-
同学你好
这个可能是和 ts 版本有关系,在这里它的推论没有那么精确。可以手动的添加返回的类型,比如
(url: string, deps: any[] = []): [any, boolean]
这样就可以获取正确的类型了。
第二个问题
因为这里其实是不用判断也可以的,因为我们我们的类型断言已经指定它为 IShowResult,它不会是 undefined 类型
012022-09-18
相似问题