【发布时间】:2021-08-25 08:52:49
【问题描述】:
我正在尝试使用自定义挂钩,并且我还实现了一个自定义挂钩,但是在执行删除操作和再次获取用户的情况下遇到问题。
第一次获取用户很好,但我如何处理删除用户和再次获取用户的场景并在 API 进行时显示加载器?
我可能错误地使用了 App 组件。谁能帮我解决这个问题,我怎样才能达到预期的效果?
谢谢
代码:
export interface APIStatus {
status: 'loading' | 'error' | 'done';
}
export const useFetch = (api, params) => {
const [data, setData] = useState([]);
const [apiStatus, setApiStatus] = useState<APIStatus>({ status: 'loading' });
const [isSignedIn] = getSignInStatus();
const fetchData = useCallback(async () => {
try {
const {data} = await api(params);
setData(data);
} catch (err) {
setApiStatus({ status: 'error' });
} finally {
setApiStatus({ status: 'done' });
}
}, [api]);
useEffect(() => {
if (isSignedIn) fetchData();
}, [isSignedIn]);
return { apiStatus, data };
};
//App.tsx
export const App: React.FC = () => {
const { apiStatus, data } = useFetch(apis.fetchUsers, "limit=100");
const deleteUser = (id) => {
const { apiStatus, data } = useFetch(apis.deleteUser, `id=${id}`);
// 1. apiStatus is only available inside. I cannot access it in return and show loader
if (data.status){
// 2. How can I call the fetchUsers API again as I cannot call the useFetch hook inside if block
}
}
return(
<>
{apiStatus.status === 'loading' ? <ShowLoader /> : data.map(user => <div key={user.id} onClick={() => deleteUser(user.id)}> {user.name} </div>)}
</>
)
}
【问题讨论】:
标签: reactjs typescript react-hooks