【发布时间】:2021-03-25 13:39:27
【问题描述】:
我有一个 React Hook,它以多种形式用于从 API 调用中获取数据。目标 URL 是使用挂钩的参数定义的。返回的对象可能是几种类型之一,具体取决于使用钩子的组件,我在下面包含了一个摘录:
export const useFormControl = (
feature: Feature,
id?: string,
) => {
const [{ data, error, loading}] = useAxios({
url: `https://this.is.the.url?feature=feature&id=id`,
});
...
return {
data,
error,
loading,
...
} as const;
};
我使用的效果如下:
const FormType1 = {
prop1 : string;
prop2: string
}
export const Form = ({ ... }: FormProps) => {
const [formData, setFormData] = useState<FormType1>();
const {
data,
error,
loading,
...
} = useFormControl(mode,id);
useEffect(() => {
if (data) {
setFormData(data as FormType );
}
}, [formData]);
// use formData here...
}
这种模式重复了很多次。我宁愿不必在每个组件中都有一个 useEffect 使用钩子将传入的数据转换为该表单的 FormType。有没有办法使用泛型来“键入”自定义钩子,以便 useAxios 钩子的数据可以是正确的类型?
【问题讨论】:
标签: reactjs typescript generics axios react-hooks