# React Native

The React Native environment has a lot of little quirks, so this documentation is aimed at helping smooth those over.

Please feel free to create issues on GitHub for recommendations and additions to this document.

## Shims

There are several pieces of functionality missing from the current version of React-Native. Here is a list of functionality the `ethers/dist/shims` will provide if unavailable:

> - `ArrayBuffer.isView`
> - `atob` and `btoa`
> - `nextTick`
> - `Promise`
> - `String.prototype.normalize`

Importing into React-Native

    // Import the required shims
    import 'ethers/dist/shims.js';

    // Import the ethers library
    import { ethers } from 'ethers';

Note
  This file must be minified, since the React-Native `require` seems to hijack the variable name `require`, even when encapsulated inside a closure. The minification process replaces the `require` with a mangled name, so that there is no collision. This is hacky and in the future a better method would be preferred. Suggestions?
Note
  As we find additional features not generally available, they will be added to this shim file. It is targetted toward platforms where build-size is not critical, so functionality is favored over keeping the size small.

## Wordlists

React-Native will pull in the browser version of ethers, which does not have all the additional word lists, by default. Each desired wordlist must be separately imported.

Importing languages into React-Native

    import {
        es,     // Spanish
        fr,     // French
        it,     // Italian
        ja,     // Japanese
        ko,     // Korean
        zh_ch,  // Chinese (simplified)
        zh_tw   // Chinese (tranditional)
    } from 'ethers/wordlists';

## Other Notes

console.log
  The use of `console.log` in React Native can substantially impact performance. For this reason, you may wish to reduce the log level to not show info and warnings.

Change Log Level

    // The default is "info"; other options
    // "debug", "info", "warn", "error", "off"
    ethers.errors.setLogLevel("error");

TODO: Include instructions on installing crypto performance

- scrypt (it is VERY slow in React Native; too slow to be functional)