【发布时间】:2021-12-30 00:38:10
【问题描述】:
function useRequest() {
const [accessToken, setAccessToken] = useState(42);
const [refreshToken, setRefreshToken] = useState(7);
const request = async (url) => {
try {
const res = await axios.get(url, { Headers: { Auth: accessToken } });
} catch (error) {
if (error.response.status === 401) {
refresh(() => request(url));
}
}
}
const refresh = async (callback) => {
const res = await axios.get("myserver.com", { params: { refreshToken }});
setAccessToken(res.data.accessToken);
callback()
}
return request;
}
所以我想调用这个 api 并在访问令牌过期时刷新它。问题是,当我在刷新函数中设置访问令牌状态时,回调是用旧状态调用的,因为 setState 是异步的。在其他情况下,我可以只使用 useEffect 但我不确定在这种情况下该怎么做。
【问题讨论】:
-
为什么不能使用useEffect?
-
useEffect会是什么样子?感觉就像我必须添加另一个useState来保存需要在访问令牌更新后调用的回调。但是接下来的问题是如何确保回调状态在访问令牌状态之前更新。 @Cole 使用 ref 的建议对我来说是可行的,但我很想看看useEffect是如何工作的。
标签: javascript reactjs react-hooks use-state