热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在ReactJS中使用Firestore数据库?

如何在ReactJS中使用Firestore数据库?原文

如何在 ReactJS 中使用 Firestore 数据库?

原文:https://www . geeksforgeeks . org/how-用法-firestore-database-in-reactjs/

Firebase 是一款谷歌产品,可以帮助我们轻松构建、管理和开发我们的应用程序。在本文中,我们将看到如何使用 firebase firestore 作为后端,并在我们的演示 react 项目中使用 firebase 提供的 G-auth。当您设计像 iOS 或 Android 应用程序或 web 应用程序这样的移动应用程序时,数据库是一个大问题,这并不是因为它很难设计,当然设计起来有点棘手,有时它会消耗大量带宽数据库和应用程序前端之间的流量是一个大问题除此之外,主机页面也是一个问题, 想象一下,如果你的应用程序有照片共享功能,你想访问那里的所有照片,那么现在维护所有这些功能并不容易。此外,管理自己的身份验证系统也很棘手,因为每个人都需要来自脸书的身份验证,也许推特,也许谷歌,甚至一个简单的登录系统都不容易从头设计。 现在火基地来了,火基地给你一个完整的解决方案,关于如何把东西拿下来。现在这是一个非常好的完整后端解决方案,您可以使用。现在有了 firebase,您可以进行各种身份验证,最常见的是用户名、电子邮件和密码,但是有很多不同的登录方式,下面是所有可能方式的快照。

firebase 还解决了数据库的一个非常好的问题,它为您提供了一个实时数据库,在本文中,我们将看到如何将 firebase 用于数据库。

创建反应应用程序并安装模块:

步骤 1: 使用以下命令创建一个反应应用程序:

npx create-react-app foldername

步骤 2: 创建项目文件夹(即文件夹名)后,使用以下命令移动到该文件夹中:

cd foldername

步骤 3: 创建 ReactJS 应用程序后,使用以下命令安装所需的*模块:*

**npm i firebase**

**项目结构:如下图。****

****

项目结构****

**运行应用程序的步骤:从项目的根目录使用以下命令运行应用程序:****

**npm start**

*让我们首先创建两个输入字段,即名称和密码以及一个提交按钮。*

*App.js*

**import React, { useState } from "react";
import "./App.css";
function App() {
  const [customerName, setCustomerName] = useState("");
  const [customerPassword, setCustomerPassword] = useState("");
  return (
    


      

                  type="text"
          placeholder="Name"
          value={customerName}
          OnChange={(e) => setCustomerName(e.target.value)}
        />
                  type="text"
          placeholder="Password"
          value={customerPassword}
          OnChange={(e) => setCustomerPassword(e.target.value)}
        />
        
      

    

  );
}
export default App;**

*App.css*

**.App {
  text-align: center;
  height: 100vh;
  display: grid;
  place-items: center;
}
.App__form {
  display: flex;
  flex-direction: column;
}
input {
  padding: 7px 11px;
  border-radius: 3px;
  border: none;
  border-bottom: 1px solid gray;
  margin: 20px;
  outline: none;
}
button {
  display: inline-block;
  margin-right: auto;
  margin-left: auto;
  padding: 7px 12px;
  border: none;
  border-radius: 4px;
}**

**现在我们将创建火基地项目并创建 火基地配置文件。****

**创建 火基地项目的步骤:****

**第一步:登录火基仪表盘,点击添加项目卡。****

**第二步:输入你的项目名称点击继续。****

**步骤 3: 在配置谷歌分析中,选择 Firebase 的默认帐户,然后单击创建项目。****

**

**第四步:等待 firebase 创建你的项目。****

**

**第 5 步:项目创建后,转到如图所示的网络图标。****

**

**第六步:给应用取昵称,选择 firebase hosting 复选框如果你想用 firebase 托管你的应用,注册你的应用。****

**

**第 7 步:如果尚未安装 Firebase CLI,只需在您的 VScode 终端上使用下面给出的命令进行安装****

**npm install -g firebase-tools**

**

**步骤 8: 完成后,使用下面给出的命令,使用命令行或 VSCode 中的终端登录到您的 firebase。****

**firebase login**

**第 9 步:点击继续控制台。****

**第 10 步:下一步进入你的应用点击设置图标,在底部选择配置选项复制配置数据。转到您的本地项目,在 src 文件夹中创建一个名为 firebase.js 的文件,并粘贴配置数据以及其中的几行,如下所示。****

**

*火库. js*

**import firebase from "firebase";
const firebaseCOnfig= {
  apiKey: "AIzaSyATKyTSJVN7-Zx60WQ66kkHo3nBhuMhYDs",
  authDomain: "meteor-3fd94.firebaseapp.com",
  projectId: "meteor-3fd94",
  storageBucket: "meteor-3fd94.appspot.com",
  messagingSenderId: "391620415322",
  appId: "1:391620415322:web:6848292646d9e91e6e6d63",
  measurementId: "G-69J20TCH7X",
};
const firebaseApp = firebase.initializeApp(firebaseConfig);
const db = firebase.firestore();
export default db;**

**现在我们已经准备好了配置文件,我们只需要为 CRUD 操作添加代码:****

**1。创建集合:要创建集合,我们只需使用我们在上面的 firebase.js 中创建的 db 对象。我们只需将它导入到我们的文件中,并使用 collection 方法来定位集合,在创建之后,我们的数据将存储在该集合中。如果您的集合嵌套在其他集合中,您将不得不像这样编写它, db.collection( <父集合>)。doc( )。收藏(<子-收藏>)以此类推。现在一旦我们在我们的集合中,我们只是简单地添加我们的数据作为一个对象。****

*App.js***

***import React, { useState } from "react";
import "./App.css";
import db from "./firebase";
function App() {
  const [customerName, setCustomerName] = useState("");
  const [customerPassword, setCustomerPassword] = useState("");
  const submit = (e) => {
    e.preventDefault();
    db.collection("customersData").add({
      name: customerName,
      password: customerPassword,
    });
    setCustomerName("");
    setCustomerPassword("");
  };
  return (
    


      

                  type="text"
          placeholder="Name"
          value={customerName}
          OnChange={(e) => setCustomerName(e.target.value)}
        />
                  type="text"
          placeholder="Password"
          value={customerPassword}
          OnChange={(e) => setCustomerPassword(e.target.value)}
        />
        
      

    

  );
}
export default App;***

*现在我们将测试我们的代码是否工作。***

****

*一旦我们看到这一页,那么我们都准备好了。只需转到本地主机,输入详细信息并按提交,然后再次打开 Firebase 中的 Firestore 数据库,您将看到如下所示的内容:***

****

*所以我们可以看到如上所示的数据***

*2。读取操作:现在读取数据,初始过程相同,即导入数据库对象。不,我们去存储我们想要读取的数据的集合,然后我们使用 onSnapshot 方法,顾名思义,每当数据库中发生任何更改时,它都会简单地拍摄快照。这个函数负责我们使用 firebase 时获得的实时感觉。***

*App.js***

***import React, { useState, useEffect } from "react";
import "./App.css";
import db from "./firebase";
function App() {
  const [customerName, setCustomerName] = useState("");
  const [customerPassword, setCustomerPassword] = useState("");
  const [customersData, setCustomersData] = useState([]);
  useEffect(() => {
    db.collection("customersData").onSnapshot((snapshot) => {
      setCustomersData(
        snapshot.docs.map((doc) => ({
          id: doc.id,
          data: doc.data(),
        }))
      );
    });
    console.log({ customersData });
  }, []);
  const submit = (e) => {
    e.preventDefault();
    db.collection("customersData").add({
      name: customerName,
      password: customerPassword,
    });
    setCustomerName("");
    setCustomerPassword("");
  };
  return (
    


      

                  type="text"
          placeholder="Name"
          value={customerName}
          OnChange={(e) => setCustomerName(e.target.value)}
        />
                  type="text"
          placeholder="Password"
          value={customerPassword}
          OnChange={(e) => setCustomerPassword(e.target.value)}
        />
        
      

      

        
          
            
            
          
          {customersData?.map(({ id, data }) => (
            
              
              
            
          ))}
        
NAMEPASSWORD
{data.name}{data.password}

      

    

  );
}
export default App;***

*运行应用程序的步骤:从项目的根目录使用以下命令运行应用程序:***

***npm start***

*输出:现在打开浏览器,转到http://localhost:3000/,会看到如下输出:***

****

*3。更新操作:我们先来看一个应该更新的按钮和应该出现的字段。现在我们从 firebase.js 导入 db 对象后,我们只需转到存储要更新的数据的集合,然后我们指定需要更新的文档,因为一个集合有许多文档,所以我们必须指定要更新什么文档,然后我们只需使用更新方法并传递更新的对象。***

*App.js***

***import React, { useState, useEffect } from "react";
import "./App.css";
import db from "./firebase";
function App() {
  const [customerName, setCustomerName] = useState("");
  const [customerPassword, setCustomerPassword] = useState("");
  const [customersData, setCustomersData] = useState([]);
  const [updatedCustomerName, setUpdatedCustomerName] = useState("");
  const [updatedCustomerPassword, setUpdatedCustomerPassword] = useState("");
  const [dataIdToBeUpdated, setDataIdToBeUpdated] = useState("");
  useEffect(() => {
    db.collection("customersData").onSnapshot((snapshot) => {
      setCustomersData(
        snapshot.docs.map((doc) => ({
          id: doc.id,
          data: doc.data(),
        }))
      );
    });
  }, []);
  const submit = (e) => {
    e.preventDefault();
    db.collection("customersData").add({
      name: customerName,
      password: customerPassword,
    });
    setCustomerName("");
    setCustomerPassword("");
  };
  const updateData = (e) => {
    e.preventDefault();
    db.collection("customersData").doc(dataIdToBeUpdated).update({
      name: updatedCustomerName,
      password: updatedCustomerPassword,
    });
    setUpdatedCustomerPassword("");
    setUpdatedCustomerName("");
    setDataIdToBeUpdated("");
  };
  return (
    


      {!dataIdToBeUpdated ? (
        

                      type="text"
            placeholder="Name"
            value={customerName}
            OnChange={(e) => setCustomerName(e.target.value)}
          />
                      type="text"
            placeholder="Password"
            value={customerPassword}
            OnChange={(e) => setCustomerPassword(e.target.value)}
          />
          
        

      ) : (
        

                      type="text"
            placeholder="Name"
            value={updatedCustomerName}
            OnChange={(e) => setUpdatedCustomerName(e.target.value)}
          />
                      type="text"
            placeholder="Password"
            value={updatedCustomerPassword}
            OnChange={(e) => setUpdatedCustomerPassword(e.target.value)}
          />
          
        

      )}
      

        
          
            
            
            
          
          {customersData?.map(({ id, data }) => (
            
              
              
              
            
          ))}
        
NAMEPASSWORDUpdate
{data.name}{data.password}
                                  OnClick={() => {
                    setDataIdToBeUpdated(id);
                    setUpdatedCustomerPassword(data.password);
                    setUpdatedCustomerName(data.name);
                  }}
                >
                  Update
                
              

      

    

  );
}
export default App;***

*运行应用程序的步骤:从项目的根目录使用以下命令运行应用程序:***

***npm start***

*输出:现在打开浏览器,转到http://localhost:3000/,会看到如下输出。更新数据后,您可以在 firebase 仪表板中查看数据是否更新。***

****

*4。删除操作:从同样的事情开始,我们在我们的文件中导入 db 对象,然后我们简单地转到存储要删除的数据的集合,然后我们指定我们需要删除的文档,因为一个集合有许多文档,所以我们必须指定要删除什么文档,然后我们简单地调用删除方法。***

*App.js***

***import React, { useState, useEffect } from "react";
import "./App.css";
import db from "./firebase";
function App() {
  const [customerName, setCustomerName] = useState("");
  const [customerPassword, setCustomerPassword] = useState("");
  const [customersData, setCustomersData] = useState([]);
  const [updatedCustomerName, setUpdatedCustomerName] = useState("");
  const [updatedCustomerPassword, setUpdatedCustomerPassword] = useState("");
  const [dataIdToBeUpdated, setDataIdToBeUpdated] = useState("");
  useEffect(() => {
    db.collection("customersData").onSnapshot((snapshot) => {
      setCustomersData(
        snapshot.docs.map((doc) => ({
          id: doc.id,
          data: doc.data(),
        }))
      );
    });
  }, []);
  const submit = (e) => {
    e.preventDefault();
    db.collection("customersData").add({
      name: customerName,
      password: customerPassword,
    });
    setCustomerName("");
    setCustomerPassword("");
  };
  const updateData = (e) => {
    e.preventDefault();
    db.collection("customersData").doc(dataIdToBeUpdated).update({
      name: updatedCustomerName,
      password: updatedCustomerPassword,
    });
    setUpdatedCustomerPassword("");
    setUpdatedCustomerName("");
    setDataIdToBeUpdated("");
  };
  const deleteData = (id) => {
    db.collection("customersData").doc(id).delete();
  };
  return (
    


      {!dataIdToBeUpdated ? (
        

                      type="text"
            placeholder="Name"
            value={customerName}
            OnChange={(e) => setCustomerName(e.target.value)}
          />
                      type="text"
            placeholder="Password"
            value={customerPassword}
            OnChange={(e) => setCustomerPassword(e.target.value)}
          />
          
        

      ) : (
        

                      type="text"
            placeholder="Name"
            value={updatedCustomerName}
            OnChange={(e) => setUpdatedCustomerName(e.target.value)}
          />
                      type="text"
            placeholder="Password"
            value={updatedCustomerPassword}
            OnChange={(e) => setUpdatedCustomerPassword(e.target.value)}
          />
          
        

      )}
      

        
          
            
            
            
            
          
          {customersData?.map(({ id, data }) => (
            
              
              
              
              
            
          ))}
        
NAMEPASSWORDUpdateDelete
{data.name}{data.password}
                                  OnClick={() => {
                    setDataIdToBeUpdated(id);
                    setUpdatedCustomerPassword(data.password);
                    setUpdatedCustomerName(data.name);
                  }}
                >
                  Update
                
              

                                  OnClick={() => {
                    deleteData(id);
                  }}
                >
                  Delete
                
              

      

    

  );
}
export default App;***

*运行应用程序的步骤:从项目的根目录使用以下命令运行应用程序:***

***npm start***

*输出:现在打开浏览器,转到http://localhost:3000/,会看到如下输出。删除数据后,您可以在 firebase 仪表板中检查数据是否被删除。***

****


推荐阅读
  • 使用Python模拟登录教务系统抓取成绩并分析存储
    本文详细介绍如何使用Python编程语言模拟登录学校教务系统,抓取学生的成绩信息,并进行数据分析和可视化处理,最终将数据存储到MySQL数据库中。 ... [详细]
  • Hibernate入门指南:单表数据库操作详解
    本文介绍了Hibernate作为全面的ORM框架的基础知识,并详细讲解了在MyEclipse环境中配置Hibernate以及进行基本的数据库单表操作的方法,包括增删改查等常见操作。 ... [详细]
  • 本文探讨了如何利用 Application 对象在 PHP 应用程序中共享数据,特别是在多用户环境中保持数据的一致性和安全性。文章还介绍了 Application 对象的基本结构、方法和事件,并提供了实际应用示例。 ... [详细]
  • 本文探讨了在JavaScript中如何有效地从服务器控件DropDownList中获取绑定的ID值,而非仅仅是显示的文本值。这对于需要根据用户选择动态处理数据的应用场景非常有用。 ... [详细]
  • 浏览器、中间件与服务器的交互机制
    本文详细探讨了浏览器、中间件和服务器之间的交互过程,特别是HTTP请求的完整流程,包括DNS解析、TCP连接建立及数据传输等关键步骤。 ... [详细]
  • 本文介绍了FTP(文件传输协议)的基础知识,包括其定义、如何通过TCP建立控制和数据连接,以及主动模式与被动模式的区别。FTP作为一种重要的文件传输协议,在互联网数据交换中扮演着关键角色。 ... [详细]
  • 近期在维护旧项目时遇到一个问题,在iOS8环境下,UILabel无法正常显示文本。通过深入分析,我们发现这一现象与UILabel的使用方式有关,特别是在嵌套UILabel的情况下。 ... [详细]
  • 本文将指导你通过 Gulp 和 Webpack 构建一个简单的用户登录界面,包括目录结构设置和关键文件的配置。 ... [详细]
  • Python安全实践:Web安全与SQL注入防御
    本文旨在介绍Web安全的基础知识,特别是如何使用Python和相关工具来识别和防止SQL注入攻击。通过实际案例分析,帮助读者理解SQL注入的危害,并掌握有效的防御策略。 ... [详细]
  • 介绍了一款轻量级的移动端弹窗组件,支持Toast、Alert和Confirm三种弹窗样式,完全采用原生JavaScript编写,无需依赖外部库或CSS文件。 ... [详细]
  • 使用EF Core在.Net Core控制台应用中操作SQLite数据库
    本文介绍如何利用Visual Studio 2019和Windows 10环境,通过Entity Framework Core(EF Core)实现对SQLite数据库的读写操作。项目源代码可从百度网盘下载。 ... [详细]
  • 本文详细介绍如何在Spring Boot项目中集成和使用JPA,涵盖JPA的基本概念、Spring Data JPA的功能以及具体的操作步骤,帮助开发者快速掌握这一强大的持久化技术。 ... [详细]
  • J2EE平台集成了多种服务、API和协议,旨在支持基于Web的多层应用开发。本文将详细介绍J2EE平台中的13项关键技术规范,涵盖从数据库连接到事务处理等多个方面。 ... [详细]
  • 本文档提供了详细的MySQL安装步骤,包括解压安装文件、选择安装类型、配置MySQL服务以及设置管理员密码等关键环节,帮助用户顺利完成MySQL的安装。 ... [详细]
  • SQLite是一种轻量级的关系型数据库管理系统,尽管体积小巧,却能支持高达2TB的数据库容量,每个数据库以单个文件形式存储。本文将详细介绍SQLite在Android开发中的应用,包括其数据存储机制、事务处理方式及数据类型的动态特性。 ... [详细]
author-avatar
zc43pml
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有