En la primera parte de esta serie, aprendió cómo configurar React Native en su máquina, crear y usar componentes personalizados y usar bibliotecas de terceros, como moment.js. En este tutorial, aprenderá a realizar solicitudes de red utilizando ha podido recuperar
, renderizar una página web usando el incorporado WebView
componente, y ejecutar la aplicación en un dispositivo físico.
En la primera parte de esta serie, utilizamos el api
Funciona, pero aún no la hemos definido. Comience creando un src directorio y agregar un archivo a ella, api.js. Abra el archivo y agregue lo siguiente:
module.exports = function (url) return fetch (url) .then (function (response) return response.json ();). then (function (json) return json;);
Este archivo usa el ha podido recuperar
función, que por defecto está disponible en React Native. Esta función permite que la aplicación realice solicitudes de red. Si has usado jQuery, es bastante similar al $ .ajax
función. Usted especifica una URL y algunos datos opcionales, y obtiene una respuesta.
La única diferencia es que necesitas hacer un poco de trabajo extra. La función para capturar la primera promesa devuelve la respuesta sin formato, lo que significa que debe llamar al json
método en el respuesta
para obtener la promesa que devuelve la cadena JSON. Así que tienes que devolver el resultado de esto y capturar la promesa llamando al entonces
Funciona una vez más y pasa la función que será llamada una vez que la promesa se resuelva.
La cadena JSON se pasaría entonces como un argumento a esta función, por lo que simplemente la devolveremos. los ha podido recuperar
método devuelve una promesa por lo que cuando llamamos a la api
método, todavía tenemos que llamar al entonces
método para capturar la respuesta real, tal como lo hicimos en la primera parte de esta serie.
api (story_url) .then ((story) => …);
Página web
Componentelos Página web
El componente es responsable de la prestación de una página web. Utiliza el WebView
componente para hacerlo.
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, button: textAlign: 'left', color: '#FFF', page_title: color: '#FFF ', spinner: alignItems:' flex-end '); module.exports = WebPage; this.truncate (this.state.pageTitle) this.state.isLoading &&
Primero, hacemos un poco de mantenimiento creando las variables que necesitamos y solicitando las bibliotecas que usaremos.
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');
A continuación, creamos la Página web
componente.
var WebPage = React.createClass (…);
Nosotros fijamos esta cargando
a cierto
como el estado por defecto. Esta propiedad es responsable de determinar si mostrar o no el girador. De forma predeterminada, el selector debe estar visible para indicar que la página se está cargando..
getInitialState: function () return isLoading: true; ,
A continuación, renderizamos el componente. Al igual que el componente de elemento de noticias, este también tiene un encabezado y un cuerpo. El encabezado contiene un botón Atrás, el título de la página y una rueda giratoria..
render: function () return (); , this.truncate (this.state.pageTitle) this.state.isLoading &&
El cuerpo contiene la WebView
componente. los WebView
componente tiene un url
y onNavigationStateChange
atributos los url
es la URL que se pasó de la ver pagina
función en el Artículos de noticias
componente anterior. Entonces cuando se ejecuta el siguiente código:
this.props.navigator.push (name: 'web_page', url: url);
los renderScene
método en index.android.js también se ejecuta y se le pasa la URL:
renderScene: función (ruta, navegador) var Component = ROUTES [route.name]; regreso (); ,
Así es como tenemos acceso a la URL extrayéndola de los accesorios: this.props.url
.
Volvamos a los atributos añadidos a la WebView
componente. Tenemos el onNavigationStateChange
atributo, que se utiliza para especificar la función que se ejecutará siempre que la vista web navegue a una nueva página. Así es como se ve esa función:
onNavigationStateChange: function (navState) if (! navState.loading) this.setState (isLoading: false, pageTitle: navState.title); ,
Cuando se llama a la función anterior, Estado del nav
se pasa como un argumento. Esto contiene información sobre el estado actual de la vista web, como el título de la página y si se está cargando o no. Este es el lugar perfecto para actualizar el estado. Cuando la página ya no se está cargando, configuramos esta cargando
a falso
y establecer un valor para el Título de la página
.
A continuación, tenemos la atrás
Función, que hace que el navegador retroceda una página. Esto se llama cuando el usuario pulsa el botón Atrás en el encabezado.
back: function () this.props.navigator.pop ();
los truncar
la función limita la longitud de lo que se pasa a la función. Usamos esta función para limitar el texto del título de la página web..
truncar: function (str) return _.truncate (str, 20); ,
La hoja de estilo se ve así:
var styles = StyleSheet.create (container: flex: 1, webview_header: paddingLeft: 10, backgroundColor: '# FF6600', flex: 1, justifyContent: 'espacio entre', flexDirection: 'row', header_item : paddingLeft: 10, paddingRight: 10, justifyContent: 'center', webview_body: flex: 9, button: textAlign: 'left', color: '#FFF', page_title: color: '#FFF ', spinner: alignItems:' flex-end ');
Por último, exponga el componente al mundo exterior:
module.exports = WebPage;
Para ejecutar la aplicación, necesitas un dispositivo Android o un emulador. Si quieres usar un emulador, te recomiendo usar Genymotion. Puede ejecutar la aplicación ejecutando el siguiente comando:
reaccionar nativo correr-android
Este comando instala y lanza la aplicación. Pero obtendrá el siguiente error si intenta hacerlo:
Esto se debe a que React Native espera que el servidor React se ejecute en su máquina. El servidor React compila la aplicación cada vez que guarda los cambios en su editor de texto. los reaccionar nativo correr-android
El comando solo se utiliza para ejecutar la aplicación con el fin de probar y depurar la aplicación. Es por eso que depende del servidor React para compilar realmente la aplicación.
Para deshacerse del error, necesita ejecutar el inicio nativo reactivo
comando para iniciar el servidor. Esto toma un tiempo en la primera ejecución, pero cuando llega a la parte donde dice lo siguiente:
Gráfico de dependencia del edificio (35135ms)
Puede abrir una nueva ventana de terminal en el directorio de su proyecto y ejecutar adb shell input keyevent 82
. Esto abre el menú del desarrollador en el dispositivo o emulador. Una vez que se abre el menú, seleccione ajustes de desarrollo luego selecciona servidor y puerto de depuración.
Esto abre un mensaje que le solicita que ingrese la dirección IP y el puerto de su computadora. Averigüe la dirección IP interna de su computadora e ingrésela en el indicador junto con el puerto 8081, que es el puerto predeterminado en el que se ejecuta el servidor React. En otras palabras, si su dirección IP es 192.168.254.254, luego entra 192.168.254.254:8081.
Después de eso, vuelve al menú del desarrollador y selecciona recargar JS. Esto vuelve a cargar la aplicación para que detecte la instancia del servidor React en ejecución. La aplicación debería funcionar correctamente sin problemas..
Si desea realizar una prueba en un dispositivo iOS, siga la guía en el sitio web React Native.
Hemos construido una aplicación de lector de noticias bastante ordenada con React Native. ¿Que sigue? Aquí hay algunas ideas si desea obtener más información sobre React Native:
Eso es. En este tutorial, aprendiste a trabajar con React Native para crear una aplicación de lector de noticias que habla con la API de Hacker News. Si tiene alguna pregunta, colóquela en los comentarios a continuación y haré todo lo posible por responderlas. Puede encontrar los archivos de origen de este tutorial en GitHub. Gracias por leer.