不变冲突:Chrome不支持在本机模块上调用同步方法



我已经将这个React库分叉用于React Native,并通过安装React Native svg、使用经过时间和道具类型使其工作:

https://github.com/vydimitrov/react-countdown-circle-timer

然而,我现在无法使用调试器:

不变冲突:在本机模块上调用同步方法Chrome不支持。

考虑提供替代方法以在调试中公开此方法模式,例如通过提前暴露常量。

此错误位于:在Countdown CircleTimer中(位于AppRoot.js:118(在AppRoot中(位于App.js:9(在Provider中(位于App.js:8(在应用程序中(位于renderApplication.js:40(在RCTView中(位于AppContainer.js:101(在RCTView中(位于AppContainer.js:119(

我已经到处搜索了可能导致错误的软件包的线索,我只能看到报告的与react本机设备信息有关的问题,但这并不是问题的原因。这个错误意味着什么?如果有关它的信息如此之少,我如何开始调试它?

这是临时修复。这对我来说非常有效。你必须编辑这个文件

node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js

callNativeSyncHook(
moduleID: number,
methodID: number,
params: any[],
onFail: ?Function,
onSucc: ?Function,
): any {
const isDebuggingEnabled = (typeof atob !== 'undefined');
this.processCallbacks(moduleID, methodID, params, onFail, onSucc);
if(!isDebuggingEnabled)
{
return global.nativeCallSyncHook(moduleID, methodID, params);
}
}

您也可以使用修补程序包对其进行永久修补。

底层问题

对于其他从谷歌搜索到这里的人来说,自2011年以来,这个问题似乎发生了很大变化(这并不奇怪(。

如果你尝试@MuhammadNuman的解决方案,你只会得到一个关于global.nativeCallSyncHook不是函数的不同错误。

我使用的解决方法是简单地从callNativeSyncHook返回任何其他内容。例如:

callNativeSyncHook(
moduleID: number,
methodID: number,
params: any[],
onFail: ?Function,
onSucc: ?Function,
): any {
const isDebuggingEnabled = (typeof atob !== 'undefined');
this.processCallbacks(moduleID, methodID, params, onFail, onSucc);
if (!isDebuggingEnabled) {
return "Meh, I have no idea what's going on here, but at least this gets rid of the annoying error!";
}
}

我很想知道是否有";适当的";2011年后修复这个问题的方法,但现在这对我来说已经足够好了。

我使用的是RN 0.67.3。此错误是在调试模式下的Galaxy S22中发现的。我重新运行yarn android,错误已经消失。

相关内容

最新更新