javascript - 对象作为 React 子对象无效(找到:带有键 {seconds, nanoseconds} 的对象)
问题描述
我正在使用 Firebase 创建一个 React 日历应用程序,并且在为每个安排的事件打印日期时遇到了一些问题。
这是我的应用程序代码:
import React, { useState, useEffect } from 'react'
import firebase from 'firebase';
import { Button, FormControl, InputLabel, Input } from '@material-ui/core';
import DatePicker from 'react-datepicker';
import 'react-datepicker/dist/react-datepicker.css';
import db from './firebase'
import TodoList from './TodoList'
const HomePage = () => {
const [todos, setTodos] = useState([]);
const [input, setInput] = useState('');
const [startDate, setStartDate] = useState(new Date())
useEffect(() => {
db.collection('todos').orderBy('timestamp', 'desc').onSnapshot(snapshot => {
setTodos(snapshot.docs.map(doc => ({ id: doc.id, todo: doc.data().todo, date: doc.data().date })))
})
}, [])
const addTodo = (event) => {
event.preventDefault()
db.collection('todos').add({
todo: input,
date: startDate,
timestamp: firebase.firestore.FieldValue.serverTimestamp(),
})
setTodos([...todos, input, startDate ])
setInput('')
}
return (
<div className='text-center' >
<h1>TO DO LIST FIREBASE</h1>
<form onSubmit={addTodo}>
<FormControl>
<InputLabel>Write Your Todo</InputLabel>
<Input value={input} onChange={event => setInput(event.target.value)} />
<DatePicker selected={startDate}
onChange={date => setStartDate(date)}
dateFormat="dd/MM/yyyy h:mm aa"
showTimeSelect
/>
<Button disabled={!input} variant='contained' color='primary' type='submit' >
Add Todo
</Button>
</FormControl>
</form>
<TodoList todos={todos} />
</div >
)
}
export default HomePage;
这是我的 Todo List 组件代码:
import React from 'react';
import db from './firebase';
import DeleteIcon from '@material-ui/icons/Delete';
import { List } from '@material-ui/core'
export default function TodoList( { todos }) {
return (
<>
<List>
{todos.map((todo, index) => (
<li key={index}>
{todo.todo}
<br />
{todo.date}
<DeleteIcon onClick={event => db.collection('todos').doc(todo.id).delete()} />
</li>
))}
</List>
</>
)
}
问题是......我只能在几秒钟内将“日期”作为字符串传递......当我尝试在我的 Todo List 组件上转换它以将其作为人类可读的日期返回时,它给我带来了这个错误。
编辑:这是我所拥有的打印: TodoList with seconds
而且我想将其更改为正常的日期格式而不会出现此错误。
解决方案
这是因为你todo.date
的类型是对象。
例如
const date = new Date(timeStamp)
// in jsx
{date }
// u will got error : Error: Objects are not valid as a React child
// convert it to primitive type
{data.toLocaleString()}
或者你可以试试这种方式
<DatePicker selected={startDate}
onChange={date => setStartDate(new Date(date).toLocaleString())}
dateFormat="dd/MM/yyyy h:mm aa"
showTimeSelect
/>
推荐阅读
- python - 使用 GitPython 反向读取提交
- javascript - 在codeigniter的单个复选框中插入多条记录?
- python-3.x - 具有> 3个特征的分层凝聚聚类
- javascript - Javascript 文件加载其他 Javascript 文件没有窗口/文档
- python - Replace ones in binary columns with values from another column
- php - PHP get_class 错误将 SimpleXML 转换为数组
- r - 如何在 R 的滚动窗口中跳过 NA 列
- html - html5 MKV 带字幕播放
- model-view-controller - Opencart 无法在视图中显示从控制器发送的变量
- php - PHP Dropdown,如何获取选定的文本?