Advertisement
  1. Code
  2. React Native

Creación de una aplicación de diccionario usando React Native para Android

Scroll to top
Read Time: 9 min

() translation by (you can also view the original English article)

Introducción

React Native de Facebook es un poderoso framework que te permite crear aplicaciones Android e iOS de forma rápida y sin esfuerzo utilizando solamente JavaScript y JSX. Las aplicaciones creadas con React Native hacen uso de los componentes nativos de la interfaz de usuario y, por lo tanto, son indistinguibles de las aplicaciones creadas directamente con los SDK de Android e iOS.

Su rendimiento tampoco es muy diferente al de las aplicaciones nativas, porque casi todo el código de JavaScript se ejecuta en segundo plano en una instancia incrustada de JavaScriptCore, que es el mismo motor de JavaScript que impulsa a Safari de Apple.

En este tutorial, te ayudaré a comenzar a trabajar con React Native para Android mostrándote cómo crear una sencilla aplicación de diccionario inglés-alemán.

Requisitos previos

Antes de comenzar, asegúrate de tener lo siguiente instalado en tu computadora:

  • La versión más reciente del SDK de Android y la biblioteca de soporte de Android
  • La versión más reciente de Node.js

A partir de septiembre de 2015, React Native solamente es compatible con OS X. Sin embargo, con la ayuda de algunos scripts, React Native v0.11.4 funciona bien en Ubuntu 14.04.

1. Instalación de React Native

React Native está disponible como un paquete de Node.js y se puede instalar rápidamente usando npmNode Package Manager (Gestor de paquetes de Node).

1
npm install -g react-native-cli

Para usar React Native con el fin de desarrollar aplicaciones Android, debes configurar el valor de una variable de entorno llamada ANDROID_HOME para que sea igual a la ruta absoluta del directorio que contiene el SDK de Android. Si estás usando el shell Bash, puedes configurar la variable usando export.

1
export ANDROID_HOME=/path/to/Android/Sdk

2. Creación de un proyecto nuevo

Para crear un proyecto de React Native, debes usar la interfaz de línea de comandos, o CLI, de React Native, a la que puedes acceder usando el comando react-native. En este tutorial vamos a crear una aplicación de diccionario, así que asignemos el nombre Dictionary (Diccionario) al proyecto.

1
react-native init Dictionary

Una vez que el comando termine de ejecutarse, tendrás un nuevo directorio llamado Dictionary (Diccionario) que contendrá una aplicación de inicio de React Native. Entra al nuevo directorio usando cd.

1
cd Dictionary

Antes de continuar, te sugiero que ejecutes la aplicación de inicio para asegurarte de que tu entorno de desarrollo tenga todo lo que React Native necesita. Para hace eso, escribe el siguiente comando:

1
react-native run-android

Ahora encontrarás una aplicación llamada Dictionary (Diccionario) instalada en tu emulador. Haz clic en su icono para ejecutarla. Si todo salió bien, deberías ver una pantalla similar a esta:

Starter AppStarter AppStarter App

3. Preparación del punto de entrada de tu aplicación

De forma predeterminada, el punto de entrada de una aplicación Android de React Native es un archivo de JavaScript llamado index.android.js. Cuando generaste el proyecto usando la CLI de React Native, este archivo se creó automáticamente. Sin embargo, contiene código que pertenece a la aplicación de inicio. Puedes modificar y usar partes de ese código para tu aplicación, o simplemente puedes eliminarlo todo y comenzar desde cero. Para este tutorial, te sugiero que hagas esto último.

Una vez que hayas eliminado el contenido de index.android.js, usa require para cargar un módulo llamado react-native. Este módulo contiene todas las funciones y objetos de React Native que necesitarás para crear tu aplicación.

1
var React = require('react-native');

4. Creación de un componente de React

Los componentes de React son objetos de JavaScript responsables de renderizar y actualizar automáticamente la interfaz de usuario de una aplicación React Native. De hecho, casi todos los elementos de la interfaz de usuario de una aplicación React Native son un componente de React. Esto significa que, para crear la interfaz de usuario de tu aplicación, debes crear tu propio componente de React personalizado. Para hacer eso, usa la función createClass de React. El siguiente código crea un componente llamado Dictionary (Diccionario):

1
var Dictionary = React.createClass({
2
3
});

Puedes ver este componente como la primera pantalla de tu aplicación.

Paso 1: Definición del diseño

React Native llama automáticamente a la función render cada vez que necesita dibujar o actualizar un componente. Por lo tanto, debes agregar esta función a tu componente. Dentro de la función, puedes definir el diseño del componente usando JSX, una extensión de sintaxis de JavaScript que te permite mezclar fácilmente etiquetas XML con código JavaScript.

React Native ofrece varios componentes que puedes usar para crear el diseño. Por ahora usaremos un React.View como contenedor, un React.Text para mostrar texto y un React.TextInput para aceptar la entrada del usuario. Agrega el siguiente código al componente:

1
render: function() {
2
    var layout =
3
        <React.View style = { styles.parent } >
4
5
            <React.Text>
6
                Type something in English:
7
            </React.Text>
8
9
            <React.TextInput />
10
11
            <React.Text style = { styles.germanLabel } >
12
                Its German equivalent is:
13
            </React.Text>
14
15
            <React.Text style = { styles.germanWord } >                
16
            </React.Text>
17
          
18
        </React.View>
19
    ;
20
	return layout;
21
},

Si estás familiarizado con HTML, puedes pensar en el View como un div de HTML, en el Text como un span de HTML, y en el TextInput como un elemento input de HTML.

Paso 2: Adición de estilos

En el fragmento de código anterior, varios componentes tienen un atributo style. El atributo style es bastante similar al atributo class de HTML. Sin embargo, en lugar de hacer referencia a una clase CSS en una hoja de estilo, hace referencia a un objeto JSON en una instancia de React.StyleSheet.

Para crear un objeto React.StyleSheet para tu aplicación, debes usar la función React.StyleSheet.create. Como su único argumento, espera un objeto JSON que contenga los estilos de los componentes individuales. Estos son los estilos que usé para nuestra aplicación de ejemplo:

1
var styles = React.StyleSheet.create({
2
3
	// For the container View
4
    parent: {
5
        padding: 16
6
    },
7
8
	// For the Text label
9
    germanLabel: {
10
        marginTop: 20,
11
        fontWeight: 'bold'
12
    },
13
14
	// For the Text meaning
15
    germanWord: {
16
        marginTop: 15,
17
        fontSize: 30,
18
        fontStyle: 'italic'
19
    }
20
});

Paso 3: Registro del componente

Par que React Native sepa que debe renderizar tu componente cuando tu aplicación sea ejecutada, debes registrarlo usando la función React.AppRegistry.registerComponent. Para hacer eso, agrega el siguiente código al final de index.android.js:

1
React.AppRegistry.registerComponent('Dictionary', () => Dictionary);

Si no estás familiarizado con las funciones flecha de ES6, simplemente puedes usar el siguiente código JavaScript convencional en su lugar:

1
React.AppRegistry.registerComponent('Dictionary', function() {
2
	return Dictionary;
3
});

Si lo deseas, ahora puedes volver a cargar tu aplicación para ver el nuevo diseño. Para hacer eso, presiona el botón de menú de tu emulador y haz clic en Volver a cargar JS.

The layoutThe layoutThe layout

4. Control del estado del componente

Todos los componentes tienen una variable miembro especial llamada state, que es un objeto JSON. Es especial, porque tan pronto como el valor de la variable state de un componente cambia, React Native automáticamente vuelve a renderizar el componente para reflejar el cambio. Esta es una función muy útil y, si la usas correctamente, puedes evitar el tener que obtener o actualizar manualmente el contenido de los elementos de la interfaz de usuario de tu aplicación.

Agreguemos dos claves, input y output, a la variable state del componente Dictionary. Para hacer eso, tendrás que usar una función llamada getInitialState. El valor de retorno de esta función se convierte en el valor de la variable state del componente.

1
getInitialState: function() {
2
    return {
3
        input: '',
4
        output: ''
5
    };
6
},

Ahora puedes asociar el TextInput con input y el último componente Text con output. Después de hacer eso, tu diseño debería verse así:

1
<React.View style = { styles.parent } >
2
3
    <React.Text>
4
        Type something in English:
5
    </React.Text>
6
7
    <React.TextInput text = { this.state.input } />
8
9
    <React.Text style = { styles.germanLabel } >
10
        Its German equivalent is:
11
    </React.Text>
12
13
    <React.Text style = { styles.germanWord } >
14
        { this.state.output }
15
    </React.Text>
16
  
17
</React.View>

Como habrás adivinado, input contendrá la palabra en inglés escrita por el usuario, mientras que output contendrá su equivalente en alemán.

Si bien los cambios en state se envían automáticamente a la interfaz de usuario, lo contrario no ocurre. Esto significa que la variable state de nuestro componente no cambia si el usuario escribe algo en el TextInput. Para actualizar state manualmente, deberías usar el método setState del componente.

Para enviar el valor del TextInput a input, puedes agregar un oyente onChangeText al TextInput y hacer una llamada a setState en su interior. Usando ES6, la etiqueta del TextInput se verá así:

1
<React.TextInput text = { this.state.input }
2
	onChangeText={(e) => this.setState({input: e})}
3
/>

En este punto, cualquier cosa que el usuario escriba en el TextInput de tu aplicación estará disponible inmediatamente en input. Todo lo que nos queda por hacer es asociar input a su equivalente en alemán y actualizar output. Para hacer eso, puedes usar un diccionario llamado Diccionario para principiantes del Sr. Honey (alemán-inglés) por Winfried Honig. Descarga el equivalente en JSON del diccionario de GitHub y agrégalo a tu proyecto.

Para cargar el diccionario dentro de index.android.js, usa require.

1
var english_german = require('./english_german.json');

Ya que english_german no es más que un objeto JSON global en el que las palabras en inglés son claves y sus equivalentes en alemán son valores, todo lo que debes hacer ahora es verificar si input está disponible como una clave y, de ser así, llamar a setState para asignar a output el valor asociado. El código para hacer eso podría tener esta apariencia:

1
showMeaning: function() {
2
	// Use the ternary operator to check if the word 
3
	// exists in the dictionary.
4
	var meaning = this.state.input in english_german ? 
5
		            english_german[this.state.input] : 
6
		            "Not Found";
7
8
	// Update the state
9
	this.setState({
10
		 output: meaning 
11
	});
12
},

Ahora puedes asignar showMeaning al oyente onSubmitEditing del TextInput, con el fin de que se invoque solamente cuando el usuario haya terminado de escribir.

1
<React.TextInput
2
    onChangeText={(e) => this.setState({input: e})}
3
    text = { this.state.input }
4
    onSubmitEditing = { this.showMeaning }
5
/>

Tu aplicación de diccionario está lista. Puedes volver a cargarla y escribir una palabra en inglés para ver inmediatamente su traducción en alemán.

English-German DictionaryEnglish-German DictionaryEnglish-German Dictionary

Conclusión

En este tutorial, aprendiste cómo instalar React Native y cómo usarlo para crear tu primera aplicación Android, un diccionario inglés-alemán, usando solamente JavaScript y JSX. Al hacer eso, aprendiste a crear un componente personalizado, a estilizarlo y a usar su variable state para controlar lo que muestra.

Para obtener más información sobre React Native, puedes consultar su documentación.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.