2016-08-24 144 views
1

使用Fetch API對本機做出反應,這不會在完成承諾後更新ui。React本機獲取狀態不更新

當我們觸摸屏幕(是的,並用正確的數據更新UI)時,我們意識到承諾的解決方案。

對於workarround,我們使用axios(https://github.com/mzabriskie/axios)並解決了我們的問題。

下面是代碼:

產品service.js

export class ProductsService { 
    constructor() { 
    } 

    getProductDetail(id) { 
     let url = 'http://myservice/product-detail/' + id; 
     return fetch(url) 
      .then((response) => response.json()); 
    } 
} 

我-component.js

export class MyComponent extends Component { 
    constructor(props) { 
     super(props); 

     this.state = { 
      product: {} 
     }; 
    } 

    componentDidMount() { 
     let productService = new ProductsService(); 
     productService.getProductDetail(1) 
      .then((productDetail) => { 
       console.log('updateProduct: ', productDetail); 
       this.setState({ 
        product: productDetail 
       }); 
      }) 
      .catch((error) => { 
       console.error(error); 
      }); 
    } 

    render() { 
     return (
      <View> 
       <Text>{this.state.product.name}</Text> 
      </View> 
     ); 
    } 
} 

當我們使用抓取,產品名稱纔會顯示我們觸摸設備屏幕。 當我們使用axios時,它工作。

這是一個錯誤?

環境:Windows 10,安卓6,陣營本地0.31

+0

我認爲這是RN獲取錯誤。 – deju

回答

2
我不使用

反應本地人,但是,剛纔有同樣的問題。這個東西是this.setState當諾言解決不指向組件。

之前抓取叫我存儲一個變種

const thiz = this; 

,然後使用THIZ VAR設置狀態

thiz.setState({}); 

,或者你可以在功能結合THIZ

then((function(){ 
    this.setState({}); 
}).bind(thiz))