2016-12-04 3 views
1

Здравствуйте, я попытался установить состояние на выборку называют так:Невозможно установить состояние на выборку реагировать родной

getCats() { 
     fetch(GLOBALS.API + '/specials.php?action=getCats&key=' + GLOBALS.KEY) 
     .then((response) => response.json()) 
     .then((responseJson) => { 
      this.setState = ({ 
       dataSource: "test" 
      }); 
Alert.alert("test"); 

     }) 
     .catch((error) => { 
      console.log(error.toString()); 
     }); 
    } 

    componentDidMount() { 
     this.getCats(); 
     console.log(this.state.dataSource); 
    } 

но линии:

console.log(this.state.dataSource); 

вернуть меня неопределенными и я получаю предупреждение «испытание»

что проблема?

Тпх много

+0

Проверьте мой ответ –

+0

я рад, что он работает для вас. вы могли бы также возвысить :-) –

ответ

1

Вы можете использовать обратные вызовы.

Ниже приведен пример кода

getCats(successCallBack, failureCallback) { 
    fetch(GLOBALS.API + '/specials.php?action=getCats&key=' + GLOBALS.KEY) 
     .then(
      function(response) { 
       if (response.status !== 200) { 
        console.log('Looks like there was a problem. Status Code: ' + 
         response.status); 
        failureCallback(); 
       } 
       // Examine the text in the response 
       response.json().then(function(data) { 
        console.log(data) 
        successCallBack(data); 
       }); 
      } 
     ) 
     .catch(function(err) { 
      console.log('Fetch Error :-S', err); 
      failureCallback(); 
     }); 
} 

Ниже приведен код для успеха и вызова отказа поддерживает

successCallBack(data) { 
    console.log(data) 
} 

failureCallback() { 
    alert("failure"); 
} 

Ниже приведен код, чтобы связать успех и неудачи обратных вызовов ,

getCats(this.successCallBack.bind(this), this.failureCallback.bind(this)); 
1

Fetch является асинхронным, так он будет немедленно вернуться, перед кодом в то пункты запускаются. Поэтому setState не будет запускаться до ведения журнала консоли.

+0

так как я создаю listview после извлечения с данными на выборку? – gregory

+0

При изменении состояния компонент будет автоматически перерисовываться. I.e., если метод визуализации должным образом зависит от состояния, то это изменение состояния - это все, что необходимо для автоматического обновления пользовательского интерфейса при изменении состояния. Таким образом, одним из способов было бы иметь первоначально пустой массив как переменную состояния, перебрать эту переменную в методе рендеринга (рендеринг вашего списка) и заполнить переменную состояния значениями из http-запроса, вызывая повторную визуализацию с обновленным значения. –