我正在构建一个原型,该原型在React中获取Spotify用户的播放列表数据。数据获取是在useEffect挂钩内完成的,并设置播放列表变量的状态。因此,我想呈现每个播放列表的名称。但是,似乎仅在渲染后才获取数据,这会引起问题,因为渲染前未设置状态,因此播放列表变量未定义。在继续使用React钩子时如何解决此问题?我的代码如下。
import './App.css'
import queryString from 'query-string'
import React, { useState, useEffect } from 'react'
const App = () => {
const [userData, setUserData] = useState({})
const [accesstoken, setAccesstoken] = useState('')
const [playlists, setPlaylists] = useState({})
useEffect(() => {
let parsed = queryString.parse(window.location.search)
let accesstoken = parsed.access_token
if (!accesstoken) {
return
}
setAccesstoken(accesstoken)
fetch('https://api.spotify.com/v1/me', {
headers: {'Authorization': 'Bearer ' + accesstoken}
}).then(response => response.json())
.then(data => setUserData(data))
fetch(`https://api.spotify.com/v1/me/playlists`, {
headers: {'Authorization': 'Bearer ' + accesstoken}
}).then(response => response.json())
.then(data => setPlaylists(data))
}, [])
return(
<div>
{accesstoken ? (
<div>
<h1>Welcome, {userData.display_name}</h1>
<h2>Playlists</h2>
<div>
{playlists.items.map(playlist =>
<p>
{playlist.name}
</p>
)}
</div>
</div>
) : (
<button onClick={() => window.location = 'http://localhost:8888/login'}>Login</button>
)}
</div>
);
}
export default App;
使用conditional rendering
。检查渲染中的值
<div>
{userData && <h1>Welcome, {userData.display_name}</h1>}
<h2>Playlists</h2>
{playlists && playlists.items && (
<div>
{playlists.items.map((playlist) => (
<p>{playlist.name}</p>
))}
</div>
)}
</div>;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句