热门标签 | 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 仪表板中检查数据是否被删除。***

****


推荐阅读
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
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社区 版权所有