【发布时间】:2021-04-01 19:02:08
【问题描述】:
我正在使用 useEffect 和 useState 从异步函数中获取数据。每次播放列表状态发生变化时,我都会调用这个 useEffect 。这真的很低效,因为我的代码经历了一个无限循环,我不能控制台记录任何东西。但是,我希望能够在不刷新页面的情况下更新数据,所以这是我的逻辑。有没有更有效的方法来执行此操作并在不刷新页面的情况下获取数据。我不想每次都调用 onMount([]),因为我必须刷新。
const [playlists, getPlaylists] = useState([])
useEffect(()=>{
let mounted = true
GetUserPlaylists().then(data => {
if (mounted){
getPlaylists(data)
}
})
return () => {mounted = false};
},[playlists])
async function GetUserPlaylists() {
var user = await Auth.currentAuthenticatedUser()
user = user.attributes.email
try{
const playlists = await API.graphql(graphqlOperation(queries.getUserPlaylist, {id: user}))
return playlists.data.getUser.playlists.items
} catch(err){
console.log(err)
}
}
export default GetListenerPlaylists
我的 getUserPlaylists 函数从 Amplify GraphQL 查询返回数据。
【问题讨论】:
-
只需将播放列表作为道具传递。
GetUserPlaylists()的结果究竟如何变化? -
您需要以其他方式更新状态。只需每五秒左右查询一次 API。还是每分钟?无论如何,请改用
setInterval()。
标签: javascript reactjs use-effect use-state