Проверки момента работают только на некоторых устройствах в React Native - PullRequest
0 голосов
/ 04 июля 2019

В моем приложении 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 включен, проверка работает правильно.Но без этого проверка не работает.

Пока не знаю причину.

1 Ответ

1 голос
/ 04 июля 2019

Это вызвано различными средами JavaScript.Посмотрите документы здесь :

JavaScript Runtime

При использовании React Native ваш код JavaScript будет выполняться в двух средах:

  • В большинстве случаев React Native будет использовать JavaScriptCore, движок JavaScript, поддерживающий Safari.Обратите внимание, что в iOS JavaScriptCore не использует JIT из-за отсутствия доступной для записи исполняемой памяти в приложениях iOS.
  • При использовании отладки Chrome весь код JavaScript запускается внутри самого Chrome, связываясь с собственным кодом через WebSockets.Chrome использует V8 в качестве движка JavaScript.

Хотя обе среды очень похожи, вы можете столкнуться с некоторыми несоответствиями.В будущем мы, вероятно, собираемся экспериментировать с другими движками JavaScript, поэтому лучше не полагаться на специфику любой среды выполнения.

Я думаю, что проблема может заключаться в создании даты.Вместо new Date(val) попробуйте создать дату сразу с моментом.Например: moment(2019-30-06, "YYYY-DD-MM")

...