首页 > 解决方案 > Moment 验证仅适用于 React Native 中的某些设备

问题描述

我的 React Native 应用程序中有以下代码。

const year10To18 = (val) => {
  const birthDate = moment(new Date(val));
  const today = moment();
  const difference = today.diff(birthDate, 'years');
  return difference >= 10 && difference <= 18;
};

此验证在我的 android 设备上正常工作,但在其他设备上,这不起作用?这里可能是什么问题?

注意:我发现了这个问题。如果 React Native 调试器打开,那么验证工作正常。但没有它,验证就不起作用。

还不知道原因。

标签: javascriptreactjsreact-nativemomentjs

解决方案


这是由不同的 JavaScript 环境引起的。看看这里的文档:

JavaScript 运行时

使用 React Native 时,您将在两种环境中运行 JavaScript 代码:

  • 在大多数情况下,React Native 将使用 JavaScriptCore,这是支持 Safari 的 JavaScript 引擎。请注意,在 iOS 上,由于 iOS 应用程序中没有可写的可执行内存,JavaScriptCore 不使用 JIT。
  • 使用 Chrome 调试时,所有 JavaScript 代码都在 Chrome 内部运行,通过 WebSockets 与本机代码通信。Chrome 使用 V8 作为其 JavaScript 引擎。

虽然这两种环境非常相似,但您最终可能会遇到一些不一致的情况。将来我们可能会尝试使用其他 JavaScript 引擎,因此最好避免依赖任何运行时的细节。

我认为问题可能是日期创建。而不是new Date(val),尝试使用时刻直接创建日期。例如: moment(2019-30-06, "YYYY-DD-MM")


推荐阅读