4 回答

TA貢獻(xiàn)1963條經(jīng)驗(yàn) 獲得超6個(gè)贊
只是關(guān)于如何使用鉤子和功能組件以另一種方式處理這個(gè)問(wèn)題的想法。正如其他人已經(jīng)提到的,代碼中的主要問(wèn)題是回調(diào)未返回結(jié)果或設(shè)置為狀態(tài)。
const MyTop10Artists = () => {
const [artists, setArtists] = useState([]);
const [isLoading, setIsLoading] = useState(true);
const [error, setError] = useState();
useEffect(() => {
Api.getMyTopArtists((err, data) => {
if (err) {
console.error(err);
setError(err);
return;
}
setArtists(data.items);
setIsLoading(false);
});
}, []);
return (
<>
{isLoading && "Loading"}
{error && error}
{!isLoading && artists.length === 0 && "No artists"}
{!isLoading &&
artists.map((artist) => (
<div key={artist.id} className="card">
<div key={artist.id} className="cardContent">
<h3>{artist.name}</h3>
</div>
</div>
))}
</>
);
};
const API = () => (
<div className="cardsWrap">
<MyTop10Artists />
</div>
);

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超11個(gè)贊
存儲(chǔ)items狀態(tài)并使用 api 響應(yīng)更新它。這將導(dǎo)致您的組件重新渲染。
另外,將您的 api 調(diào)用移至組件掛鉤
componentDidMount(){
Api.getMyTopArtists(function (err, data) {
this.setState({
items: data.items
})
}

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超5個(gè)贊
這是行不通的,因?yàn)槟菑幕卣{(diào)返回?cái)?shù)據(jù),而是需要將this.setState()獲取的數(shù)據(jù)存儲(chǔ)到您的狀態(tài)中,然后顯示它。
class API extends Component {
constructor(props){
super(props);
this.state = {
data: null,
error: null
}
this.myTop10Artists = this.myTop10Artists.bind(this);
}
componentDidMount(){
this.myTop10Artists();
}
myTop10Artists() {
Api.getMyTopArtists(function (err, data) {
if (err) {
this.setState({...this.state, error: err});
} else {
this.setState({error: null, data})
}
});
}
render() {
const {error, data} = this.state;
if(error){
return <div>Error! Try again</div>
}
if(!data){
return <div>Loading..</div>
}
return (
<div>
data.items.map((artist) => (
<div key={artist.id} className="card">
<div key={artist.id} className="cardContent">
<h3> {artist.name} </h3>{" "}
</div>{" "}
</div>
))
</div>
)
}
}

TA貢獻(xiàn)2065條經(jīng)驗(yàn) 獲得超14個(gè)贊
1-在返回值中使用映射函數(shù)
2-使用圓括號(hào)而不是大括號(hào)來(lái)包圍箭頭函數(shù)
return ({data.items.map((artist) => (
<div key={artist.id} className="card">
<div key={artist.id} className="cardContent">
<h3> {artist.name} </h3>{" "}
</div>{" "}
</div>
))};
);
添加回答
舉報(bào)