React中使用Mongoose传递当前时间至MongoDB失败问题排查
问题解决:React中Mongoose传递当前时间到MongoDB失败
核心问题
你当前的写法里,输入框的value直接绑定了generateTime()函数——这个函数会在组件每次渲染时生成新的时间,但你的orderTime状态只有在手动修改输入框内容时才会更新。提交数据时你应该是用了orderTime这个状态值,但它初始是空字符串,除非手动改输入框,否则一直是空,所以数据库接收不到有效数据。硬编码能正常传递是因为直接给了固定值,和状态无关。
修复方案
方案一:初始化状态为当前时间(支持用户手动修改)
把状态初始值设为生成的时间,输入框绑定状态值,这样提交时orderTime就会有正确的时间数据:
const [orderTime, setOrderTime] = useState(generateTime()); function generateTime() { return new Date().toLocaleTimeString(); } <input type="text" className="form-control" id="OrderTime" placeholder="Order Time" value={orderTime} onChange={(event) => setOrderTime(event.target.value)} />
方案二:提交时直接生成时间(无需用户修改时更推荐)
如果不需要用户手动调整时间,完全可以不在前端输入框绑定动态生成的时间,而是在提交请求的瞬间生成时间并传入参数,避免组件重复渲染生成冗余时间:
const [orderTime, setOrderTime] = useState(""); function generateTime() { return new Date().toLocaleTimeString(); } // 提交数据的示例函数 const handleSubmit = () => { const submitData = { // 其他需要提交的字段 orderTime: generateTime() // 直接在这里生成时间,不依赖前端状态 }; // 调用接口将submitData传给Mongoose }; <input type="text" className="form-control" id="OrderTime" placeholder="Order Time" value={orderTime || generateTime()} // 仅用于前端显示 disabled // 禁止用户修改 onChange={(event) => setOrderTime(event.target.value)} />
额外提示
如果你的MongoDB集合需要存储的是Date类型而非字符串,直接传递new Date()即可,Mongoose会自动处理日期类型的存储:
// 提交时的参数 orderTime: new Date()
内容的提问来源于stack exchange,提问作者Sandeepa de silva
相关产品推荐
相关产品推荐

