Как отобразить все результаты из Twitch API с помощью курсора - React
API Twitch отображает максимум 60 записей и курсор _next для разбиения на страницы. Я не могу найти способ отобразить все результаты, используя курсор в React, используя функцию map.
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.
2 ответа
Чтобы получить ответ на нумерацию страниц, вам нужно сделать еще один вызов Twitch API и передать курсор в after
параметр запроса или before
параметр запроса для вашего вызова дергаться.
Пример -
const api = 'https://api.twitch.tv/v5/videos/<CLIENT_ID>?after=<NEXT_CURSOR>
Я предлагаю рекурсивно вызывать функцию getComments, как показано ниже, если вы хотите получить все результаты сразу или использовать кнопку loadmore и установить токен _next в состояние на основе нажатия кнопки.
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 ;
}
});
}