Реагируйте, возникли проблемы с установкой состояния компонента внутри обещания

-2

У меня возникли проблемы с установкой состояния компонента в обещании с использованием предыдущего состояния. код здесь - https://gist.github.com/red4211/1b8ae503fc76b7a3771d45eca0b81a19

Прокомментированная часть неверна, но, надеюсь, дает вам представление о том, что я пытаюсь сделать здесь.

Пожалуйста, помогите мне, я застрял.

Спасибо за помощь, ребята, сейчас все работает!

Теги:
promise

2 ответа

0
Лучший ответ

Это обязательная проблема, чтобы решить эту 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);
1

Вам нужно связать функцию 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));
    })

Ещё вопросы

Сообщество Overcoder
Наверх
Меню