Nella prima parte di questa serie, hai imparato come configurare React Native sul tuo computer, creare e utilizzare componenti personalizzati e utilizzare librerie di terze parti, come moment.js. In questo tutorial, si impara come fare richieste di rete usando andare a prendere
, rendere una pagina web usando il built-in WebView
componente, ed eseguire l'app su un dispositivo fisico.
Nella prima parte di questa serie, abbiamo usato il api
funzione, ma non l'abbiamo ancora definita. Inizia creando un src directory e aggiungere un file ad esso, api.js. Apri il file e aggiungi il seguente:
module.exports = function (url) return fetch (url) .then (function (response) return response.json ();). then (function (json) return json;);
Questo file usa il andare a prendere
funzione, che è di default disponibile in React Native. Questa funzione consente all'app di eseguire richieste di rete. Se hai usato jQuery, è molto simile al $ .ajax
funzione. Si specifica un URL e alcuni dati opzionali e si ottiene una risposta.
L'unica differenza è che devi fare un po 'di lavoro extra. La funzione per acquisire la prima promessa restituisce la risposta non elaborata, il che significa che devi chiamare il jSON
metodo sul risposta
per ottenere la promessa che restituisce la stringa JSON. Quindi devi restituire il risultato e acquisire la promessa chiamando il poi
funzione ancora una volta e passare la funzione che verrà chiamata una volta che la promessa si risolve.
La stringa JSON sarebbe quindi passata come argomento a questa funzione, quindi la restituiamo. Il andare a prendere
metodo restituisce una promessa quindi quando chiamiamo il api
metodo, dobbiamo ancora chiamare il poi
metodo per catturare la risposta effettiva, proprio come abbiamo fatto nella prima parte di questa serie.
api (story_url) .then ((story) => ...);
Pagina web
ComponenteIl Pagina web
componente è responsabile del rendering di una pagina web. Usa il WebView
componente per farlo.
var React = require ('react-native'); var AppRegistry, StyleSheet, Text, View, WebView = React; var Button = require ('react-native-button'); var GiftedSpinner = require ('react-native-gifted-spinner'); var _ = require ('lodash'); var WebPage = React.createClass (getInitialState: function () return isLoading: true;, render: function () return (); , truncate: function (str) return _.truncate (str, 20); , onNavigationStateChange: function (navState) if (! navState.loading) this.setState (isLoading: false, pageTitle: navState.title); , back: function () this.props.navigator.pop (); ); var styles = StyleSheet.create (container: flex: 1, webview_header: paddingLeft: 10, backgroundColor: '# FF6600', flex: 1, justifyContent: 'space-between', flexDirection: 'row', header_item : paddingLeft: 10, paddingRight: 10, justifyContent: 'center', webview_body: flex: 9, pulsante: textAlign: 'left', color: '#FFF', page_title: color: '#FFF ', spinner: alignItems:' flex-end '); module.exports = WebPage; This.truncate (this.state.pageTitle) this.state.isLoading &&
In primo luogo, facciamo delle pulizie creando le variabili che ci servono e richiedendo le librerie che useremo.
var React = require ('react-native'); var AppRegistry, StyleSheet, Text, View, WebView = React; var Button = require ('react-native-button'); var GiftedSpinner = require ('react-native-gifted-spinner'); var _ = require ('lodash');
Successivamente, creiamo il Pagina web
componente.
var WebPage = React.createClass (...);
Prepariamo IsLoading
a vero
come stato predefinito. Questa proprietà è responsabile per determinare se mostrare o meno lo spinner. Per impostazione predefinita, lo spinner dovrebbe essere visibile per indicare che la pagina si sta caricando.
getInitialState: function () return isLoading: true; ,
Successivamente, rendiamo il componente. Come il componente degli articoli di notizie, anche questo ha un'intestazione e un corpo. L'intestazione contiene un pulsante indietro, il titolo della pagina e uno spinner.
render: function () return (); , This.truncate (this.state.pageTitle) this.state.isLoading &&
Il corpo contiene il WebView
componente. Il WebView
il componente ha a url
e onNavigationStateChange
attributi. Il url
è l'URL che è stato passato dal ViewPage
funzione nel NewsItems
componente precedente. Quindi quando viene eseguito il seguente codice:
this.props.navigator.push (name: 'web_page', url: url);
Il renderScene
metodo in index.android.js viene eseguito anche e l'URL viene passato ad esso:
renderScene: function (route, navigator) var Component = ROUTES [route.name]; ritorno (); ,
È così che abbiamo accesso all'URL estraendolo dagli oggetti di scena: this.props.url
.
Torniamo agli attributi aggiunti al WebView
componente. Abbiamo il onNavigationStateChange
attributo, che viene utilizzato per specificare la funzione da eseguire ogni volta che la visualizzazione Web passa a una nuova pagina. Ecco come appare questa funzione:
onNavigationStateChange: function (navState) if (! navState.loading) this.setState (isLoading: false, pageTitle: navState.title); ,
Quando viene chiamata la funzione sopra, il navState
viene passato come argomento. Questo contiene informazioni sullo stato corrente della vista Web, come il titolo della pagina e se sta caricando o meno attualmente. Questo è il posto perfetto per aggiornare lo stato. Quando la pagina non si carica più, abbiamo impostato IsLoading
a falso
e impostare un valore per il titolo della pagina
.
Successivamente, abbiamo il indietro
funzione, che fa tornare indietro il navigatore di una pagina. Questo viene chiamato ogni volta che l'utente tocca il pulsante indietro nell'intestazione.
back: function () this.props.navigator.pop ();
Il troncare
la funzione limita la lunghezza di tutto ciò che è passato nella funzione. Usiamo questa funzione per limitare il testo per il titolo della pagina della pagina web.
truncate: function (str) return _.truncate (str, 20); ,
Il foglio di stile è simile al seguente:
var styles = StyleSheet.create (container: flex: 1, webview_header: paddingLeft: 10, backgroundColor: '# FF6600', flex: 1, justifyContent: 'space-between', flexDirection: 'row', header_item : paddingLeft: 10, paddingRight: 10, justifyContent: 'center', webview_body: flex: 9, pulsante: textAlign: 'left', color: '#FFF', page_title: color: '#FFF ', spinner: alignItems:' flex-end ');
Infine, esporre il componente al mondo esterno:
module.exports = WebPage;
Per eseguire l'app, è necessario un dispositivo Android o un emulatore. Se si desidera utilizzare un emulatore, si consiglia di utilizzare Genymotion. Puoi eseguire l'app eseguendo il seguente comando:
react-native run-android
Questo comando installa e avvia l'app. Ma avrai il seguente errore se proverai a farlo:
Questo perché React Native si aspetta che il server React sia in esecuzione sulla macchina. Il server React compila l'app ogni volta che salvi le modifiche nel tuo editor di testo. Il react-native run-android
il comando viene utilizzato solo per eseguire l'app allo scopo di testare e eseguire il debug dell'applicazione. Ecco perché dipende dal server React per la compilazione effettiva dell'app.
Per eliminare l'errore, è necessario eseguire il inizio reattivo
comando per avviare il server. Questo richiede un po 'di tempo durante la prima esecuzione, ma quando arriva alla parte in cui si dice quanto segue:
Grafico di dipendenza dell'edificio (35135 ms)
È possibile aprire una nuova finestra di terminale nella directory del progetto ed eseguirla adb shell input keyevent 82
. Questo apre il menu dello sviluppatore nel dispositivo o nell'emulatore. Una volta aperto il menu, selezionare impostazioni di sviluppo quindi selezionare host e porta di debug del server.
Questo apre una richiesta che ti chiede di inserire l'indirizzo IP e la porta del tuo computer. Scopri l'indirizzo IP interno del tuo computer e inseriscilo nel prompt insieme alla porta 8081, che è la porta predefinita su cui viene eseguito il server React. In altre parole, se il tuo indirizzo IP è 192.168.254.254, quindi entra 192.168.254.254:8081.
Dopodiché, torna al menu degli sviluppatori e seleziona ricarica JS. Questo ricarica l'app in modo che rilevi l'istanza del server React in esecuzione. L'app dovrebbe come funzionare senza problemi.
Se si desidera eseguire il test su un dispositivo iOS, seguire la guida sul sito Web di React Native.
Abbiamo creato un'applicazione di news reader piuttosto carina con React Native. Qual'è il prossimo? Ecco alcune idee se vuoi saperne di più su React Native:
Questo è tutto. In questo tutorial, hai imparato come lavorare con React Native per creare un'app di news reader che comunichi con l'API di Hacker News. Se avete domande, lasciatele nei commenti qui sotto e farò del mio meglio per risponderle. Puoi trovare i file sorgente di questo tutorial su GitHub. Grazie per aver letto.