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