Странный формат даты в redux devtools

Я работаю с существующей базой кода, а существующий код требует даты с конечной точки. Ожидаемое значение - это строка ISO (например, "2020-01-09T07:41:02.6025984-05:00"):

// in my sagas:

export function* handleGetServerTime(): Generator {
  try {
    const response = (yield call(
      axios.get,
      "/api/server/time"
    )) as AxiosResponse;

    // Format the response time string into a Date object
    const time = new Date(response.data);
    console.info(time);

    yield put(ActionCreators.GetServerTimeSuccess.create(time));
  } catch (error) {
    // ...
  }
}

Как видите, код берет строку ISO, создает из нее new Date, а затем отправляет ее экшену и редуктору, который сохраняет ее в хранилище как new Date.

Когда я открываю свои инструменты разработки redux, я снова вижу временную строку ISO: Странный формат даты в redux devtools

Однако приведенный выше оператор console.info печатает то, что мы обычно видим при запуске new Date: Mon Apr 05 2021 11:56:25 GMT-0700 (Pacific Daylight Time). Я получаю то же самое, когда захожу в консоль и проверяю store.getState().somewhere.timeFromServer.

Есть ли у redux devtools какое-то поведение по умолчанию для отображения объекта Date в качестве строки ISO?

Обратите внимание: я вовсе не поклонник этого шаблона программирования - я бы предпочел сохранить необработанную строку ISO, которая возвращается с сервера, и выполнять любые манипуляции с датой в моем внешнем коде. Это вызвало у меня зацикливание все утро, потому что строка ISO f = исходящая от сервера, а та, которая отображается в инструментах разработки, - это не то же самое! Преобразование из строки ISO в new Date и обратно приведет к удалению смещения времени UTC, которое я не хочу терять.

Вы не должны сохранять значения в состоянии, которое не может быть сериализованный, инструменты разработчика должны каким-то образом отображать объект Date (преобразовывать в текст), поэтому они используют toISOString, но эта строка iso локализована для времени Zulu. Во избежание путаницы лучше сохранить строку и не преобразовывать ее в актуальную. Преобразуйте его в селекторе.

HMR 05.04.2021 22:53

Дата на изображении и дата в вашем вопросе совершенно разные, вы уверены, что это то, что вы получили с сервера, и именно так это отображается в инструментах разработки?

HMR 05.04.2021 22:55

Да, эти даты разные, я просто копировал разные вещи, чтобы показать формат. Ссылка, которую вы разместили на исходный код redux-devtools, отвечает на мой вопрос для меня - они по умолчанию показывают строку ISO. Я полностью согласен с форматом, используемым при сохранении в магазине, думаю, мне придется изменить код. Не стесняйтесь размещать это в ответе, и я могу отметить это как таковое.

Seth Lutske 05.04.2021 23:45

Не вызывайте console.info непосредственно на объекте Date. Поведение не определено.

Matt Johnson-Pint 06.04.2021 00:05
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
4
17
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не должны сохранять значения в состоянии, которое не может быть сериализованный, инструменты разработчика должны каким-то образом отображать объект Date (преобразовывать в текст), поэтому они используют toISOString, но эта строка iso локализована для времени Zulu. Во избежание путаницы лучше сохранить строку и не преобразовывать ее в дату, а преобразовывать в селекторе.

Другие вопросы по теме