You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中如何将react-time-picker取值存入Firebase Firestore数据库

实现方案

前置依赖安装

在项目根目录执行命令安装Firebase官方SDK:
npm install firebase

Firestore初始化

在src目录下新建firebase.config.js文件,填入Firebase控制台中你项目的配置参数,完成数据库初始化:

// src/firebase.config.js
import { initializeApp } from "firebase/app";
import { getFirestore } from "firebase/firestore";

// 替换为你自己的Firebase项目配置项
const firebaseConfig = {
  apiKey: "对应项目的apiKey",
  authDomain: "对应项目的authDomain",
  projectId: "对应项目的projectId",
  storageBucket: "对应项目的storageBucket",
  messagingSenderId: "对应项目的messagingSenderId",
  appId: "对应项目的appId"
};

const app = initializeApp(firebaseConfig);
// 导出Firestore实例供业务代码调用
export const db = getFirestore(app);

组件逻辑改造

在原有TimePicker组件的基础上引入Firestore操作方法,新增存储逻辑。以下是完整可运行的组件代码,支持点击按钮手动保存选中时间:

import React, { useState } from 'react';
import TimePicker from 'react-time-picker';
import { db } from './firebase.config';
import { collection, addDoc, serverTimestamp } from "firebase/firestore";

function MyApp() {
  const [value, onChange] = useState('10:00');
  const [isSaving, setIsSaving] = useState(false);

  const handleSaveTime = async () => {
    setIsSaving(true);
    try {
      // 集合名可根据业务需求自定义,此处示例为selected_records
      const recordCol = collection(db, "selected_records");
      await addDoc(recordCol, {
        pickTime: value, // TimePicker返回的HH:mm格式时间字符串,可直接存入
        createTime: serverTimestamp() // 可选字段,自动生成服务端时间戳,方便后续排序查询
      });
      alert('时间保存成功');
    } catch (error) {
      console.error("存储失败:", error);
      alert('保存失败,请检查权限配置与网络状态');
    } finally {
      setIsSaving(false);
    }
  };

  return (
    <div>
      <TimePicker onChange={onChange} value={value} />
      <button 
        onClick={handleSaveTime}
        disabled={isSaving}
        style={{ margin: '12px 0', padding: '6px 16px' }}
      >
        {isSaving ? '保存中' : '保存选中时间'}
      </button>
    </div>
  );
}

export default MyApp;

补充说明

  • 部署前需要在Firebase控制台的Firestore页面配置正确的安全规则,本地调试阶段可以临时开启测试模式规避权限报错
  • 如果需要选中时间后自动存储,不需要手动点击按钮,可以在onChange回调内加入防抖逻辑后调用handleSaveTime,避免每次时间变动都触发写入请求消耗配额
  • 如果需要存储带日期的完整时间,可以在存入前自行拼接日期字段,不需要额外转换TimePicker的返回值格式

内容的提问来源于stack exchange,提问作者siddhant kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 05:03:26