2016-05-07 118 views
1

我试图使这个渲染:阵营 - 与moment.js

<p>Some date: {moment('12-25-1995', 'MM-DD-YYYY')}</p> 

,并得到错误

Uncaught Invariant Violation: Objects are not valid as a React child (found: Mon Dec 25 1995 00:00:00 GMT+0100). If you meant to render a collection of children, use an array instead or wrap the object using createFragment(object) from the React add-ons. Check the render method of `MeetingComponent`. 

我认为这是一种常见的试图输出对象时作出反应的响应。

对此,最佳实践解决方案是什么?

回答

1

你应该使用Moment的format函数来返回一个字符串,否则你正试图渲染一个Moment对象!

<p>Some date: {moment('12-25-1995', 'MM-DD-YYYY').format('MM/DD/YYYY')}</p> 

让我更彻底地解释这一点:moment构造函数可以处理两个参数,第一个是日期,第二个是日期的格式作为第一个参数传递。这与渲染日期无关,它只是允许MomentJS创建日期的正确表示,而使用标准YYYY-MM-DD格式时可以省略第二个参数。

一旦你有一个瞬间的对象,你可以用它做一些巧妙的事情,如添加天,版本比较两个日期,在任何格式格式化日期,等...

如果你已经拥有的日期以您想要的格式,您不需要使用Moment打印它 - 您已经拥有正确的字符串。但你可以使用时刻改变你的日期格式,并打印在其他一些:

<p>Some date: {moment('12-25-1995', 'MM-DD-YYYY').format('YYYY/MM/DD')}</p> 
+0

太好了,谢谢你的努力! –

+1

很好的答案,但值得注意的是,实际上有几个重载的构造函数,除了你在这里提到的,还有严格的模式和语言环境。 http://momentjs.com/docs/#/parsing/ –