원래 데이터를 가져올 URL은 하나 뿐이었지만 내 앱은 완벽하게 작동했습니다. 하지만 필자는 필요한 데이터를 가져 오기 위해 두 개의 다른 URL을 사용해야한다는 것을 깨달았습니다. 그래서 코드를 조금 변경했습니다. getData
함수를 제외하고는 거의 동일합니다. 여기서는 map
을 사용하여 URL 목록을 반복하고 데이터를 가져 왔습니다. 내 응용 프로그램은 지금 정말 버그입니다.검색 기능이 느리거나 버그가 발생하는 이유는 무엇입니까?
문제 : 나는 트리머를 검색 할 때
, 그것은 때때로 결코 페이지의 결과를 렌더링합니다. 그리고 메시지 "search for your favorite streamer!"
은 this.state.value
이 ' '
이 아니더라도 사라지지 않습니다. 그러나 입력을 변경하면 아무데도 렌더링되지 않습니다.
때때로 데이터를 가져 오지 못하고 데이터가없는 FinderResultContainer
이 렌더링됩니다. (이름 없음, img 없음, 오프라인/온라인 없음)
정확히 여기 무슨 일이 일어 났습니까? 구성 요소 수명주기 방법을 사용하지 않기 때문에 그런 느낌입니다. 그렇다면 정확히 무엇을해야합니까? 나는 초보자이기 때문에 어떤 지침이 필요하다.
getData(value) {
let streamerData = [];
let streamerInfo = {};
let urls = ['https://wind-bow.gomix.me/twitch-api/streams/' + value, 'https://wind-bow.gomix.me/twitch-api/users/' + value];
urls.map(function(each, index) {
fetch(each).then((response) =>
response.json()
).then((streamer) => streamerData.push(streamer)).then(()=>streamerInfo[index]=streamerData[index]).then(()=>{if (index === urls.length-1){this.setState({streamer: streamerData})}})},this)
}
https://codepen.io/brood915/pen/OWQpmy
당신은 두 가지 아약스 호출을하고 있기 때문에 (나는 그들이 아약스 호출이라고 생각하고있다.) 마지막 함수를하기 전에 모든 함수가 응답 할 때까지 기다리는 함수를 사용해야 할 것이다. –
웹 API가 본질적으로 비동기이기 때문에 약속 사용 https://caolan.github.io/async/ 라이브러리 –