我在我的应用程序中实现了spotify API,然而,如下图所示,post路由被击中2-4次,并不断覆盖所有导致错误的数据。
Repo(如果你需要):https://github.com/kankanrr/post-route
post route hitting multiple times的
const client_id = ""; // Your client id
const client_secret = ""; // Your secret
const redirect_uri = "http://localhost:3000/callback";
const [accessToken, setAccessToken] = useState("");
const [refreshToken, setRefreshToken] = useState("");
const [expiresIn, setExpiresIn] = useState("");
useEffect(() => {
const authParams = {
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded",
Authorization:
"Basic " +
new Buffer.from(client_id + ":" + client_secret).toString("base64"),
},
body: new URLSearchParams({
grant_type: "authorization_code",
redirect_uri: redirect_uri,
code: code,
}),
};
const refreshParams = {
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded",
Authorization:
"Basic " +
new Buffer.from(client_id + ":" + client_secret).toString("base64"),
},
body: new URLSearchParams({
grant_type: "refresh_token",
refresh_token: refreshToken,
client_id: client_id,
}),
};
fetch("https://accounts.spotify.com/api/token", authParams)
.then((result) => result.json())
.then((data) => {
console.log(data);
if (!accessToken) {
setAccessToken(data.access_token);
}
setRefreshToken(data.refresh_token);
setExpiresIn(data.expires_in);
if (!expiresIn) {
fetch("https://accounts.spotify.com/api/token", refreshParams)
.then((res) => res.json())
.then((data) => {
setExpiresIn(data.expires_in);
setAccessToken(data.access_token);
});
}
console.log(data.access_token);
// if (accessToken) return console.log("access toke +> " + accessToken);
// else window.history.pushState({}, null, "/");
})
.catch((err) => {
console.log(err);
res.sendStatus(400);
});
}, []);
字符串
我只想运行一次,这样我的令牌就不会被覆盖。这个useEffect最初是两个独立的useEffect,但我合并成一个,看看它是否会解决问题。我试着删除React严格模式,只是完全打破了应用程序。我在useeffect中尝试了async rqs。老实说,我不知道这里的问题是什么,为什么它发布多次,并覆盖我的令牌数据。
2条答案
按热度按时间yfjy0ee71#
在useEffect钩子的依赖数组中添加accessToken和refreshToken。
lpwwtiir2#
我不能评论,所以我把它放在这里。
如果你使用React.strictMode在开发模式下运行应用程序,那么任何重新呈现都会触发两次。请参阅此post了解更多信息。
尝试在预览模式下运行应用程序:
vite preview
并检查问题是否延续到构建中。