0
다음은 코드의 상태 변화에 렌더링되지 않는 반응 :는
class Twitch extends React.Component {
constructor(props){
super(props);
this.state={
channelList:null,
streamError:false,
channelError:false,
}
self=this;
this.getChannels = this.getChannels.bind(this);
}
componentWillMount() {
this.getChannels();
}
shouldComponentUpdate(nextProps, nextState) {
if (this.props.color !== nextProps.color) {
return true;
}
if (this.state.channelList !== nextState.channelList) {
return true;
}
return false;
}
getChannels(){
let channels=["ESL_SC2", "OgamingSC2",
"cretetion", "freecodecamp",
"storbeck", "habathcx",
"RobotCaleb", "noobs2ninjas",
"brunofin", "comster404"
];
let resultSet=[];
channels.map(function(channel){
axios.get('https://wind-bow.gomix.me/twitch-api/streams/'+channel)
.then(function (response) {
let resObj={};
resObj=response.data;
axios.get('https://wind-bow.gomix.me/twitch-api/channels/'+channel)
.then(function (response) {
resObj.channel=response.data;
resultSet.push(resObj);
})
.catch(function (error) {
console.log("channel error",error.response);
this.setState({channelError:true});
});
})
.catch(function (error) {
console.log("stream error",error.response);
this.setState({streamError:true});
});
})
this.setState({channelList:resultSet});
}
render(){
console.log('this.state',this.state);// ---------a
const {channelList} =this.state;
return(
<div className="container">
{channelList.length>0 &&
<div>
//render stuff here
</div>
}
</div>
);
}
}
ReactDOM.render(
<Twitch />,
document.getElementById('app')
);
API 호출 괜찮 작동하고 나는 상태로 데이터를 얻고있다. 그러나 재 렌더링은 일어나지 않습니다. console.log (a)는 처음에는 배열 길이 0을 반환하고 확장시에는 적절한 길이를 반환합니다.
'this.setState ({channelList : resultSet});'의 직전에'resultSet'이 비어 있는지 확인 했습니까? –
데이터를 추가했습니다. 나는 .then()에 setState를했다. 그럼에도 불구하고 작동하지 않습니다 – DroidNoob
결과 setSet에 데이터가 있지만 setState 후 호출되는 렌더링에서 this.state가 비어 있습니까? – paqash