TypeError:null 不是对象(评估'RNRandomBytes.seed')React Native

Posted

技术标签:

【中文标题】TypeError:null 不是对象(评估\'RNRandomBytes.seed\')React Native【英文标题】:TypeError: null is not an object (evaluating 'RNRandomBytes.seed') React NativeTypeError:null 不是对象(评估'RNRandomBytes.seed')React Native 【发布时间】:2021-07-05 05:50:30 【问题描述】:

我正在使用 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 时都会遇到此错误

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

【问题讨论】:

【参考方案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);
  


【讨论】:

我刚试过。 react-native-get-random-values 。我安装了它并添加了。 import 'react-native-get-random-values'.index.js 中,但我面临几乎相同的问题` ERROR TypeError: _$$_REQUIRE(_dependencyMap[6], "./getRandomBase64") 不是函数。 (在 '_$$_REQUIRE(_dependencyMap[6], "./getRandomBase64")(array.byteLength)', '_$$_REQUIRE(_dependencyMap[6], "./getRandomBase64")' 中未定义)`跨度> 1.杀死/关闭 Metro 捆绑器和调试器 2. npm install --save react-native-get-random-values 3. cd ios && pod install,然后 cd .. 4. put 'import 'react-native-get-random-values ' 在 index.js 的第一行 5. - getRandomValues 修改 'global' 对象(及其加密属性) - 您可以使用 console.log 10 在 devtools 中检查此对象。然后您可以访问库 api,例如://! !API 不支持 'Array' 类型,因此请参阅 lib docs 中支持的 Array 类型 const array = new Uint8Array(10); global.crypto.getRandomValues(array); console.log(array) 11. 运行应用程序 要点 => gist.github.com/majirosstefan/3f9bbf37837ea1b699e47a4674c9b3e0

以上是关于TypeError:null 不是对象(评估'RNRandomBytes.seed')React Native的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:null 不是对象(评估 ''this.state.torchon')

“TypeError:null 不是对象(评估‘RCTVideoInstance.Constants’)”

TypeError:null 不是对象(评估'RNRandomBytes.seed')React Native

TypeError:null 不是对象(评估'this.state.initialPosition') - React Native

TypeError:null 不是对象(评估“storagedTechs.split”)

如何解决:TypeError:null 不是对象(评估“AgoraRtcChannelModule.prefix”)?