时刻对象引发错误' toDate'不是一个功能

时间:2018-04-17 13:56:56

标签: 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 };

这里一切都很好。

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

依赖关系:

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

我很感激任何提示,正在发生的事情

2 个答案:

答案 0 :(得分:1)

通常,您不想存储预先构建的对象。在Redux中,奇怪的事情发生了。 Redux喜欢对事物进行序列化,对于非POJO对象(如时刻对象),它们可能被序列化到仍然拥有数据的位置,但却失去了它们的功能。

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

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

答案 1 :(得分:0)

我的结构变形后,它就会起作用。

const { name, createdAt } = user

moment(createdAt.toDate()).format()