Twitch API最多显示60条记录和一个_next光标用于分页。我找不到一种使用map函数在React中使用光标映射所有结果的方法。
componentDidMount() {
this.getComments();
}
getComments(){
const api = 'https://api.twitch.tv/v5/videos/'+ this.state.value +'/comments?client_id='+ this.state.cid;
fetch(api, {
method: 'get',
headers: {"Client-ID": this.state.cid}
})
.then((response) => response.text())
.then((responseText) => {
this.setState({hits : (JSON.parse(responseText)), api: api})
});
}
render(){
const { hits } = this.state;
console.log({hits});
return (
<div>
<ul id="results">
{ hits && hits.comments && hits.comments.length !== 0 ?
hits.comments.map(hit =>
<li key={hit._id}>
<span>[{this.convertSeconds(hit.content_offset_seconds)}] - {hit.message.body}</span>
</li>
)
:
<div>No Comments Found</div>
}
</ul>
</div>
);
}
如何使用_next游标通过这种映射技术进行映射? 还是我可以通过其他方式实现它?
下面是JSON响应。
答案 0 :(得分:2)
要获得分页响应,您需要再次调用Twitch API,并将游标中的after
查询参数或before
查询参数传递给您的twitch调用。
示例-
const api = 'https://api.twitch.tv/v5/videos/<CLIENT_ID>?after=<NEXT_CURSOR>
答案 1 :(得分:1)
我的建议是,如果您想一次获得所有结果,或者使用loadmore按钮并根据按钮的点击将_next令牌设置为状态,则递归调用如下所示的getComments函数。
let result = []
getComments(){
const api = 'https://api.twitch.tv/v5/videos/'+ this.state.value +'/comments?client_id='+ this.state.cid;
fetch(api, {
method: 'get',
headers: {"Client-ID": this.state.cid}
})
.then((response) => response.text())
.then((responseText) => {
// add response untill you get all results
if(responseText){
//store array of response objects
this.setState({
hits : [...this.state.hits, ...responseText],
cid : "YOUR NEW CURSOR ID FROM RESPONSE"})
getComments()
} else {
//exist the recursion
return ;
}
});
}