2016-06-15 2 views
0

Я использую компонент Navigator в своем приложении, чтобы отображать содержимое маршрута, я делаю HTTP-запрос с извлечением, чтобы получить данные с сервера.setState in async function response native

componentDidMount() { 
    fetch(url).then((res) => { 
     this.setState({data: res}); 
    }); 
} 

У меня есть проблема, что иногда не получать закрывающие пожары, когда компонент, который назвал его больше не установлен таким образом, я получаю сообщение об ошибке, что я пытаюсь обновить отключенный компонент. Это происходит, если вы быстро перемещаетесь между маршрутами. Есть ли способ прекратить выполнение закрытия, если компонент отключен?

ответ

2

При монтаже вашего компонента вы должны запустить fetch запрос, который дает Promise и сохранит его.

Тогда вы можете сделать это Promise a CancelablePromise и отменить обещание по размонтированию компонента.

Here вы можете прочитать, как сделать CancelablePromise.

+0

Благодарим вас, что ответит. То, что у меня на самом деле было в моем закрытии, было выборкой, а не полученными данными, и setState at и. Это дает мне идею разбить это на 3 обещания, поэтому я могу даже пропустить сортировку, если компонент уже снят со второй части. –

0

Перед установкой состояния необходимо проверить, установлен ли компонент.

componentDidMount() { 
    this.isMounted = true; 
    fetch(url).then((res) => { 
     if(this.isMounted) { 
      this.setState({this.data: res}); 
     } 
    }); 
} 

componentWillUnmount() { 
    this.isMounted = false; 
} 
+0

Прочтите статью, связанную в моем ответе. 'isMounted' является antpattern. – neciu

+0

Woah, никогда не видел этого раньше. Спасибо за ссылку. –

Смежные вопросы