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
相似问题