У меня возникли проблемы с установкой состояния компонента в обещании с использованием предыдущего состояния. код здесь - https://gist.github.com/red4211/1b8ae503fc76b7a3771d45eca0b81a19
Прокомментированная часть неверна, но, надеюсь, дает вам представление о том, что я пытаюсь сделать здесь.
Пожалуйста, помогите мне, я застрял.
Спасибо за помощь, ребята, сейчас все работает!
Это обязательная проблема, чтобы решить эту arrow function
:
this.props.list.map((current) => {
api.getStreamInfo("https://wind-bow.glitch.me/twitch-api/channels/"+current)
.then((response) => {
console.log(response.data);
let streamObj = this.state.streamObj.slice();
streamObj.push(response.data);
this.setState({ streamObj })
});
})
или Вы также можете использовать распространитель:
this.props.list.map((current) => {
api.getStreamInfo("https://wind-bow.glitch.me/twitch-api/channels/"+current)
.then((response) => {
console.log(response.data);
this.setState((prevState) => ({ streamObj: [...prevState.streamObj, response.data] }))
});
})
array.push не вернет обновленный array
, он вернет только толкаемый элемент, поэтому сначала скопируйте array
в отдельную переменную, сделайте изменения, затем используйте setState
для обновления значения.
Проверьте этот фрагмент:
let a = [1,2];
let b = [...a, 3];
console.log('a:', a);
console.log('b:', b);
Вам нужно связать функцию promise
а затем update
состояние. Используйте concat
поскольку он возвращает новый массив
Сделайте это как
this.props.list.map(function(current){
api.getStreamInfo("https://wind-bow.glitch.me/twitch-api/channels/"+current)
.then(function(response){
console.log(response.data);
this.setState(function(prevState, props){
streamObj: prevState.streamObj.concat(response.data);
})
}.bind(this));
})
или же
this.props.list.map(function(current){
api.getStreamInfo("https://wind-bow.glitch.me/twitch-api/channels/"+current)
.then(function(response){
console.log(response.data);
var streamObj = [...this.state.streamObj];
streamObj.push(response.data)
this.setState({streamObj})
}.bind(this));
})