在每次渲染上多次更改状态的更好方法是什么
What's the better way to change state on every render for number of times
使用 useEffect 我正在通过 axios 从不同的 URL 调用一些数据并尝试在每个渲染器上更改 URL,我正在使用状态来更改 URL 并且每当状态改变,URL也会改变,运行使用效果又会不同URL。但是要更改渲染中的状态,我使用的是按钮,我的问题是有什么方法可以更改状态并且 运行 API 无需单击按钮即可调用。
import React,{useState,useEffect} from "react";
import axios from "axios";
export default function TrackLoader(accessToken){
const [number, setNumber] = useState(0);
const [arrayOfPlayLists, setArrayOfPlayLists] = useState([]);
const playListIds = ["3d93aG1WkqLxS2q9GkUgXO", "37i9dQZF1DWX3xqQKu0Sgn", "37i9dQZF1DWU13kKnk03AP", "37i9dQZF1DXdPec7aLTmlC", "37i9dQZF1DX889U0CL85jj", "37i9dQZF1DXbVipT9CLvYD"]
useEffect(() =>{
async function getData(){
const response = await axios.get(`https://api.spotify.com/v1/playlists/${playListIds[number]}`,{
headers:{
Authorization:"Bearer " + accessToken.accessToken,
},
})
let selectedPlayList = response.data
setplayList(selectedPlayList)
arrayOfPlayLists.push(selectedPlayList)
}
getData();
},[number]);
return(
<div>
{number ===5? null: <button onClick={()=> setNumber(number+1)}></button>}
</div>
)
}
此外,我还试图将从 API 获得的数据放入一个数组中。对不起我的英语。
您可以使用 setTimeout 添加另一个 useEffect
useEffect(() => {
if(number <= 5) {
setTimeout(() => {
setNumber(number + 1);
}, 1000);
}
}, [number]);
使用 useEffect 我正在通过 axios 从不同的 URL 调用一些数据并尝试在每个渲染器上更改 URL,我正在使用状态来更改 URL 并且每当状态改变,URL也会改变,运行使用效果又会不同URL。但是要更改渲染中的状态,我使用的是按钮,我的问题是有什么方法可以更改状态并且 运行 API 无需单击按钮即可调用。
import React,{useState,useEffect} from "react";
import axios from "axios";
export default function TrackLoader(accessToken){
const [number, setNumber] = useState(0);
const [arrayOfPlayLists, setArrayOfPlayLists] = useState([]);
const playListIds = ["3d93aG1WkqLxS2q9GkUgXO", "37i9dQZF1DWX3xqQKu0Sgn", "37i9dQZF1DWU13kKnk03AP", "37i9dQZF1DXdPec7aLTmlC", "37i9dQZF1DX889U0CL85jj", "37i9dQZF1DXbVipT9CLvYD"]
useEffect(() =>{
async function getData(){
const response = await axios.get(`https://api.spotify.com/v1/playlists/${playListIds[number]}`,{
headers:{
Authorization:"Bearer " + accessToken.accessToken,
},
})
let selectedPlayList = response.data
setplayList(selectedPlayList)
arrayOfPlayLists.push(selectedPlayList)
}
getData();
},[number]);
return(
<div>
{number ===5? null: <button onClick={()=> setNumber(number+1)}></button>}
</div>
)
}
此外,我还试图将从 API 获得的数据放入一个数组中。对不起我的英语。
您可以使用 setTimeout 添加另一个 useEffect
useEffect(() => {
if(number <= 5) {
setTimeout(() => {
setNumber(number + 1);
}, 1000);
}
}, [number]);