TypeError: null is not an object (evaluating 'RNRandomBytes.seed') React Native

时间:2021-04-09 10:39:51

标签: reactjs react-native cryptojs web3js

我正在使用 React Native 开发一个移动应用程序,其中涉及与 web3.js 的交互 问题是 RN 不支持核心 Node.js 模块,所以我不得不安装

npm i --save react-native-crypto

npm i --save react-native-randombytes

react-native link react-native-randombytes

npm i --save-dev rn-nodeify@latest

./node_modules/.bin/rn-nodeify --hack --install

现在每当我尝试使用 crypto or web3.js enter image description here

任何线索是什么问题或者如何解决它?

1 个答案:

答案 0 :(得分:1)

好像是 react-native-randombytes 库的安装问题。

您没有考虑使用提供相同 API 的不同的、更流行的库吗?

npm 说 react-native-randombytes 每周有 19,294 次下载。 另一个名为 react-native-get-random-values 的库(每周下载 481,572 次)几乎可以保证正常工作(因为建议与 - uuid 之类的软件包结合使用)。此库的 npm 链接是 here

通过查看上面提到的两个库的源代码,两者都使用相同的 Android API,由 SecureRandom 支持,所以我希望 iOS 上也有相似之处。

react-native-get-random-values(链接 here):

@ReactMethod(isBlockingSynchronousMethod = true)
  public String getRandomBase64(int byteLength) throws NoSuchAlgorithmException {
    byte[] data = new byte[byteLength];
    SecureRandom random = new SecureRandom();

    random.nextBytes(data);

    return Base64.encodeToString(data, Base64.NO_WRAP);
  }

react-native-randombytes 库 - 链接 here

@ReactMethod
  public void randomBytes(int size, Callback success) {
    success.invoke(null, getRandomBytes(size));
  }

private String getRandomBytes(int size) {
    SecureRandom sr = new SecureRandom();
    byte[] output = new byte[size];
    sr.nextBytes(output);
    return Base64.encodeToString(output, Base64.NO_WRAP);
  }