在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",
我很感激任何提示,正在发生的事情
答案 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()