reactjs - moment 对象抛出错误 'toDate' 不是函数

标签 reactjs redux momentjs

在reducer中,我使用moment-timezone仅使用UTC时区将字符串从API转换为时刻对象:

import moment from 'moment-timezone';
moment.tz.setDefault('UTC');

然后我将字符串转换为时刻对象:

const activeStart = active_start ? moment(active_start) : null;

并将其添加到商店:

return { ...state, activeStart };

这里一切都很好。

不幸的是,当我从容器中的存储中获取此值时,我无法使用 toDate方法(需要将纯 JS Date 对象插入第三方库之一)。它说 activeStart.toDate 不是一个函数。我检查了一下,在 reducer 中我可以调用 activeStart.toDate() 并且它返回正确的 Date 对象。

依赖关系:

"moment": "2.14.1",
"moment-timezone": "^0.5.15",
"react": "^15.6",
"react-redux": "^4.4.5",

我希望得到任何提示,发生了什么

最佳答案

一般来说,您不想存储预构建的对象。在 Redux 中,奇怪的事情发生了。 Redux 喜欢序列化事物,对于非 POJO 对象(如 moment 对象),它们可能会被序列化到仍然保留数据但失去功能的程度。

您最好的选择是将其转换(或保留)为可以轻松转换为您需要的类型的对象(如字符串表示形式)的东西,然后在您的选择器(您调用以获取数据的函数)中州外),在那里进行转换:

function getActiveStart(state) {
    return state.activeStart ? moment(state.activeStart) : null;
}

关于reactjs - moment 对象抛出错误 'toDate' 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49880095/

相关文章:

javascript - 从 2 个按 id 分组的 JSON 对象创建新的 javascript 对象

react-native - useSelector 导致多次重新渲染

javascript - 为什么我的书没有排列在正确的书架上(React-Redux)?

javascript - nextProps 和 NextState 总是等效的

javascript - 如何解决相邻的 JSX 元素必须包裹在 React 中的封闭标签问题

javascript - Next.js 带有 IP 地址的 api 路由

javascript - 将基于 Promise 的 React 应用程序转换为 redux-saga : how do I set React component variables?

javascript - Fullcalendar 3.x - 无法在事件拖动时获取模式中的数据

javascript - 使用 moment js 和 bootstrap 日历时的日期格式问题

javascript - 在 DD-MM-YY-23 :59:42 format 中获取 NodeJS 中的当前时间戳