Módulos nativos para React-Native con Go (3/4)
Tags: reactnative, go, crossplatform
Published: 2019-12-03 08:55:23

---
title: Módulos nativos para React-Native con Go (3/4)
published: true
description: Desarrollar módulos nativos reutilizables
tags: react-native, golang, crossplatform
cover_image: https://www.sitepen.com/blog/wp-content/uploads/2018/12/go_blog3.png
series: Módulos nativos para React-Native con Go
---

Ánimo que en este post ya veremos nuestra app en funcionamiento sumando en Go!!

![HYPE](https://media.giphy.com/media/9J7iwvEXEGvZd4jRUn/giphy.gif)

En la parte de RN me he creado un hook para poder usar este módulo que lo he llamado _useNativeCounter_ (el código está en el [repo](https://github.com/x0s3/react-native-go-examples/)).

Vamos a lo que nos interesa realmente, cómo hago yo para llamar a mis funciones de Go?

Pues si hemos seguido el post anterior ya tenemos nuestros módulos linkeados en nuestro proyecto así que solo toca programar la parte del bridge.([llévame al punto de Android](#android))

## iOS

Como siempre, iOS es mucho mas simple de realizarlo que en Android muchas menos cosas a tener en cuenta y hacer.

Creamos 2 archivos: el Header _SampleModule.h_ y los Métodos _SampleModule.m_

en el archivo _SampleModule.h_ con poner lo siguiente es suficiente

⚠️⚠️ "caution" ⚠️⚠️

El nombre que le demos a esta interfaz debe de ser el mismo que le daremos en Android, si no habra discordancia entre plataformas. Yo lo llamaré _SAMPLE_MODULE_ como ejemplo.

![Obj-c Header](https://thepracticaldev.s3.amazonaws.com/i/9viorfxb7q8narky2tlx.png)

Luego en nuestro archivo _SampleModule.m_ podemos hacer algo tal que así

![Obj-c Módulo](https://thepracticaldev.s3.amazonaws.com/i/f1wocwv2qwwqcocyvali.png)

## Android <a name="android"></a>

(No preocuparse si tenemos Hermes habilitado, no afecta)

Podemos ir de varias maneras para poder usar nuestro módulo desde Android, aquí veremos una diferente a la de la documentación oficial de RN 😁 (de todas maneras en el repo dejo los archivos pertinentes para hacerlo de la manera oficial como en la doc.)

Vamos a crearnos una nueva clase que en este caso la llamaré SampleModule para seguir en la misma tónica que en iOS, y nuestra clase se vería algo así:

![Java Módulo](https://thepracticaldev.s3.amazonaws.com/i/8s38312284iklk04f4kz.png)

Como en iOS decía, aquí tenemos que poner el mismo nombre que queremos que el Bridge exponga a la hora de obtener los métodos y para tener ambas plataformas con el mismo nombre por eso el _NAME = "SAMPLE_MODULE";_

De la manera que lo haremos en este post ya no haría falta crear la clase Package, haremos esto en su lugar, nos vamos a la clase _MainApplication_ y en _getPackages_ añadiremos esto: (estoy usando la versión _0.61.5_ de RN)

![Java LazyModule](https://thepracticaldev.s3.amazonaws.com/i/1qhq2bi0hit95936l0ow.png)

(Parece que hay mucha magia ahora mismo, pero os dejaré como siempre abajo links de interés para poder comprender todo esto de manera más amplia y que no se haga tan pesado este post también)

## JavaScript / TypeScript

![Go-Ts](https://thepracticaldev.s3.amazonaws.com/i/xt0d6knxwjqaff9z264r.png)

![Android-gif](https://thepracticaldev.s3.amazonaws.com/i/lzwl7pqrh3ionwdcgfm6.gif)

Hasta ahora y todavía se sigue haciendo así las llamadas de los módulos nativos en RN, pero aquí hemos venido a jugar e ir un poco más allá de lo normal y nos adelantaremos en el tiempo, os mostraré como olvidarnos del bridge y todos sus beneficios que eso conlleva(o no 🙃).

_actualmente react-native funciona así_

![RN ARCH](https://formidable.com/uploads/old-diagram-full.png)

![TO BE CONTINUED](https://media.giphy.com/media/yidUzqLoT6SxgKzv20/giphy.gif)

* https://github.com/facebook/react-native/commit/060664fd3d9331f062696e68179bac9cd4544a06 

* http://blog.nparashuram.com/2019/04/lazy-native-modules-react-native-android.html

* https://facebook.github.io/react-native/docs/native-modules-android

* https://facebook.github.io/react-native/docs/native-modules-ios