在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/