How to Pass an Object Back from a React Native Android Module to Javascript

How to Pass an Object Back from a React Native Android Module to Javascript

React Native's Native Module documentation for Android says that ReadableMap directly maps to a Javascript object. I assume this means that when I pass an object from Javascript to a native module, it is available as a ReadableMap.

How do I do the reverse, which is to create a dictionary (mapping string to string) in a native module and return it to Javascript via a callback?

2 Answers

You can use WritableMap to simply pass map values through callback.

@ReactMethod
public void pass(Callback cb) {
    HashMap<String, String> hm = new HashMap<>();
    hm.put("A", "one");
    hm.put("B", "Two");
    hm.put("C", "Three");
    WritableMap map = new WritableNativeMap();
    for (Map.Entry<String, String> entry : hm.entrySet()) {
        map.putString(entry.getKey(), entry.getValue());
    }
    cb.invoke(map);
}

for more complex data, see this blog.

For React Native >=0.62, you can use this:

import com.facebook.react.bridge.WritableMap;
import com.facebook.react.bridge.Arguments;

@ReactMethod
public void test(Callback callback) {
    WritableMap map = Arguments.createMap();

    map.putString("yourKey", "yourValue");

    callback.invoke(map);
}

To call the native function in React Native, do this:

import { NativeModules } from 'react-native';

NativeModules["replaceWithTheModuleName"].test(res => {
  console.log(res);
})
1

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Sarah Jenkins
Author

Sarah Jenkins

Sarah Jenkins is a veteran tech journalist with over 12 years of experience covering artificial intelligence, mobile innovations, and digital ethics. Her insights have appeared in leading technology publications worldwide.