我已经分叉了这个React库以与React Native一起使用,并通过安装react-native-svg,use-elapsed-time和prop-types使它工作:
https://github.com/vydimitrov/react-countdown-circle-timer
但是我现在无法使用调试器:
不变违反:在本机模块上调用同步方法是 Chrome不支持。
考虑提供替代方法以在调试中公开此方法 模式,例如通过提前暴露常量。
此错误位于: 在CountdownCircleTimer中(位于AppRoot.js:118) 在AppRoot中(在App.js:9) 在提供程序中(在App.js:8) 在App中(在renderApplication.js:40) 在RCTView中(位于AppContainer.js:101) 在RCTView中(位于AppContainer.js:119)
我一直在高低搜寻有关可能导致错误的软件包的任何线索,我只能看到报告的与react-native-device-info相关的问题,但这并没有引起问题。错误是什么意思?如果周围只有很少的信息,我该如何开始调试它?
答案 0 :(得分:1)
这是临时修复。这在我这边工作得很好。你必须编辑这个文件
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);
}
}
您也可以使用 patch-package 对其进行永久修补。
答案 1 :(得分:0)
该错误仅在 DEV 中显示。您可以通过编辑以下文件来删除它:
node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js
并注释掉抛出的错误如下:
callNativeSyncHook(
moduleID: number,
methodID: number,
params: any[],
onFail: ?Function,
onSucc: ?Function,
): any {
//if (__DEV__) {
// invariant(
// global.nativeCallSyncHook,
// 'Calling synchronous methods on native ' +
// 'modules is not supported in Chrome.\n\n Consider providing alternative ' +
// 'methods to expose this method in debug mode, e.g. by exposing constants ' +
// 'ahead-of-time.',
// );
//}
this.processCallbacks(moduleID, methodID, params, onFail, onSucc);
return global.nativeCallSyncHook(moduleID, methodID, params);
}
这将解决问题,直到有人修复 react-native 中的 underlaying issue。