日期格式在 redux devtools 中表现得很奇怪

Date format acting strange in 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.log(time);

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

如您所见,代码获取 ISO 字符串,从中创建一个 new Date,然后将其发送到 action 和 reducer,后者将其作为 new Date 保存到存储中.

当我打开我的 redux devtools 时,我再次看到一个 ISO 时间字符串:

然而,上面的 console.log 语句打印了我们通常在 运行 a 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= 和 devtools 中显示的字符串 不一样 !从 ISO 字符串转换为 new Date 并再次转换回来将去除我不想丢失的 UTC 时间偏移量。

您不应将值保存在不能 serialized, the devtools have to show a Date object in some way (convert to text) so they use toISOString 的状态中,但此 iso 字符串已本地化为祖鲁时间。为防止混淆,最好保存字符串而不是将其转换为日期并在选择器中进行转换。