<button id="9slfp"><object id="9slfp"></object></button>
<button id="9slfp"><object id="9slfp"><menuitem id="9slfp"></menuitem></object></button>
    <em id="9slfp"></em>
    <button id="9slfp"><acronym id="9slfp"><input id="9slfp"></input></acronym></button>
  • 免費開源的iOS開發學習平臺

    React Native基礎:7-網絡

    目前市面上的APP已經離不開網絡了,很少有不涉及網絡請求的APP,甚至一些單機游戲都要通過網絡登陸、分享以及在游戲內購買道具。React Native提供了與WEB標準一致的Fetch API,用于滿足開發者網絡開發的需求。Fetch目前已經得到了廣泛的應用,其被認為是一種替代XMLHttpRequest(XHR)的技術。Fetch提供了一個fetch()方法,它被定義在BOM的window對象中,可以用它來發起對遠程資源的請求,同時該方法返回的是一個Promise對象,能夠對請求的返回結果進行解析處理。

    發送網絡請求

    Fetch API中最簡單的用法就是把url作為fetch()函數的參數,如下所示。

    fetch('https://mywebsite.com');
    

    另外,還可以通過Request構造器函數創建一個新的請求對象。 其中,第一個參數是請求的URL,第二個參數是一個選項對象,用于配置請求,其中可以包含請求方式(GET/POST)、請求頭、請求體等構成要素。

    fetch('https://mywebsite.com/endpoint/', {
      method: 'POST',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        firstParam: 'yourValue',
        secondParam: 'yourOtherValue',
      })
    })
    

    處理網絡響應

    使用fetch()函數發送網絡請求(Request)后,會得到服務器反饋的響應(Response)。一般來說,通過GET方式獲取到服務端數據后,通常需要將其內容在界面上展示出來。而通過POST方式提交數據之后,通常需要根據服務端返回的結果來更新界面。因此,不管哪種方式,我們都要對獲取到的服務端返回數據進行加以處理。fetch()函數會返回一個Promise對象,該對象擁有then和catch方法。

    為了演示Fetch的用法,我們首先創建一個名為NetworkDemo的工程。在index.ios.js文件中,實現一個getABook()函數,在該函數中向一個網絡地址發送請求,然后對得到的響應數據進行解析。response對象有一個json()方法,該方法可以得到Promise對象,所以我們可以在then()方法中將轉換的對象打印出來。查看iOS模擬器打印的日志數據,可以通過【Debug】-> 【Open System Log】打開查看。

    getABook() {
        fetch('https://api.douban.com/v2/book/1220562')
        .then((response) => {
          response.json()
          .then((json) => {
            console.log(json);
          });
        })
        .catch((error) => {
          console.error(error);
        });
      }
       componentDidMount() {
        this.getABook();
      }
    }
    

    在index.ios.js文件中,補充如下代碼后,在終端執行react-native run-ios命令運行程序。

    import React, { Component } from 'react';
    import {
      AppRegistry,
      View
    } from 'react-native';
    
    export default class NetworkDemo extends Component {
      render() {
        return (
          <View>
          </View>
        );
      }
    
     
    AppRegistry.registerComponent('NetworkDemo', () => NetworkDemo);
    

    iOS模擬器運行后,在system.log中,可以查看獲取到的服務器響應數據。

    WebSocket

    React Native還可以支持WebSocket,WebSocket對象可以管理與服務端的鏈接,可以用來接收和發送數據。對于WebSocket的簡單使用可以參考下方的示例代碼。

    var ws = new WebSocket('ws://host.com/path');
    
    ws.onopen = () => {
      // 打開一個連接,發送一條消息
      ws.send('something'); 
    };
    
    ws.onmessage = (e) => {
      // 接收到了一個消息
      console.log(e.data);
    };
    
    ws.onerror = (e) => {
      // 發生了一個錯誤
      console.log(e.message);
    };
    
    ws.onclose = (e) => {
      // 連接被關閉了
      console.log(e.code, e.reason);
    };
    

    精品h动漫无遮挡在线看中文|久久精品国产精品亚洲艾草|久久亚洲春色中文字幕|精品人妻少妇一区二区三区|欧美精品v国产精品v

    <button id="9slfp"><object id="9slfp"></object></button>
    <button id="9slfp"><object id="9slfp"><menuitem id="9slfp"></menuitem></object></button>
    <em id="9slfp"></em>
    <button id="9slfp"><acronym id="9slfp"><input id="9slfp"></input></acronym></button>