<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Girish Nandan</title>
    <description>The latest articles on DEV Community by Girish Nandan (@jngnandan).</description>
    <link>https://dev.to/jngnandan</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F997968%2Fcdee8d4e-da00-4386-a8ee-410b70a8b09c.jpeg</url>
      <title>DEV Community: Girish Nandan</title>
      <link>https://dev.to/jngnandan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jngnandan"/>
    <language>en</language>
    <item>
      <title>How to setup Firebase in React app</title>
      <dc:creator>Girish Nandan</dc:creator>
      <pubDate>Sun, 01 Jan 2023 17:08:41 +0000</pubDate>
      <link>https://dev.to/jngnandan/how-to-setup-firebase-in-react-app-2l52</link>
      <guid>https://dev.to/jngnandan/how-to-setup-firebase-in-react-app-2l52</guid>
      <description>&lt;p&gt;Firebase is a platform from Google which provides Realtime database, hosting and authentication services to developers. It’s easy to set up and less complex than configuring SQL database and Node.js server inside the react app&lt;/p&gt;

&lt;p&gt;To get started, install Firebase tools&lt;br&gt;
&lt;code&gt;yarn global add firebase-tools&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Install firebase functions&lt;br&gt;
&lt;code&gt;yarn add firebase-admin firebase-functions&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Install Bebel core&lt;br&gt;
&lt;code&gt;npm install --save-dev @babel/core @babel/cli @babel/preset-env cross-env rimraf&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Login to Firebase&lt;br&gt;
&lt;code&gt;firebase login&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Create Firebase Firestore Database by creating a project&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tIhZUDDx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oge1q20djmrinl7fc6e0.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tIhZUDDx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oge1q20djmrinl7fc6e0.jpeg" alt="Image description" width="750" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select Firebase Project in cli&lt;br&gt;
&lt;code&gt;firebase use &amp;lt;project_id&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Got to Firestore — Create Database with parent path, database, document id, fields&lt;/p&gt;

&lt;p&gt;Create — src/firebase.js&lt;/p&gt;

&lt;p&gt;Add your firebase configuration which can be found in project settings of the Firebase&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
// Import the functions you need from the SDKs you need
import { initializeApp } from "firebase/app";

import { getAnalytics } from "firebase/analytics";

// TODO: Add SDKs for Firebase products that you want to use

// https://firebase.google.com/docs/web/setup#available-libraries

// Your web app's Firebase configuration

// For Firebase JS SDK v7.20.0 and later, measurementId is optional
const firebaseConfig = {
apiKey: "AIzaSyCTuh63tSvoqIB6_VYZGjDmHKjYARzOaM8",
authDomain: "portfolio-gn.firebaseapp.com",
projectId: "portfolio-gn",
storageBucket: "portfolio-gn.appspot.com",
messagingSenderId: "1062624464115",
appId: "1:1062624464115:web:82daeb29023ae5c276bb86",
measurementId: "G-SNTMXRT194"
};

// Initialize Firebase
const app = initializeApp(firebaseConfig);
const analytics = getAnalytics(app);

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Import Login and Firestore and initialise it&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
import {getAuth} from "firebase/auth";

import { GoogleAuthProvider } from "firebase/auth";

import { getFirestore } from "firebase/firestore";

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&amp;amp;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
const auth = getAuth(app);
const provider = new GoogleAuthProvider();
const db = getFirestore(app);
export { auth, provider, db,};

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Initialise Auth e.g google login &amp;amp; firestore inside the firebase.js&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
//src/firebase.js
import {getAuth} from "firebase/auth";

import { GoogleAuthProvider } from "firebase/auth";

import { getFirestore } from "firebase/firestore";

// Import the functions you need from the SDKs you need

import { initializeApp } from "firebase/app";

import { getAnalytics } from "firebase/analytics";

// TODO: Add SDKs for Firebase products that you want to use

// https://firebase.google.com/docs/web/setup#available-libraries

// Your web app's Firebase configuration

// For Firebase JS SDK v7.20.0 and later, measurementId is optional
const firebaseConfig = {
apiKey: "AIzaSyCTu34tSvoqIB6_VYZGsOmHKjYARzOaM8",
authDomain: "portfolio-gn.firebaseapp.com",
projectId: "portfolio-gn",
storageBucket: "portfolio-gn.appspot.com",
messagingSenderId: "1062245464115",
appId: "1:1062624244115:web:82daeb29023ae5c276bb86",
measurementId: "G-SNTSRRT194"
};

// Initialize Firebase
const app = initializeApp(firebaseConfig);
const analytics = getAnalytics(app);

//Initialise auth, provider
const auth = getAuth(app);
const provider = new GoogleAuthProvider();
const db = getFirestore(app);
export { auth, provider, db,};

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create the Context inside the App&lt;br&gt;
src/context/MediumContext.js&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
import {createContext, useEffect, useState} from 'react'
const MediumContext = createContext()

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Import Firebase firestore functions&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
import {collection, getDocs, setDoc, doc, query} from 'firebase/firestore'
import {db} from '../firebase'

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Context page&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
//src/context/MediumContext.js
import React, { Component } from 'react'
import {createContext, useEffect, useState} from 'react'
import {collection, getDocs, setDoc, doc, query} from 'firebase/firestore'
import {db} from '../firebase'
const MediumContext = createContext()
const MediumProvider = ({children}) =&amp;gt; {
const [users, setUsers] = useState([])
const [posts, setPosts] = useState([])
useEffect(() =&amp;gt; {
const getUsers = async () =&amp;gt; {
const querySnapshot = await getDocs(collection(db, "users"));
querySnapshot.docs.map(doc =&amp;gt;
console.log(doc.data()))
}
getUsers()
}, [])
return(
&amp;lt;MediumContext.Provider value={{users, posts}}&amp;gt;
{children}
&amp;lt;/MediumContext.Provider&amp;gt;
)
}
export {MediumContext, MediumProvider}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Change the Rules to true, (Firebase project &amp;gt; Rules &amp;gt; allow read write: if True;)&lt;/p&gt;

&lt;p&gt;Now, Wrap Context around the App so that data can be passed&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
//src/index.js
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import {MediumProvider } from '../src/context/MediumProvider';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
&amp;lt;React.StrictMode&amp;gt;
   &amp;lt;MediumProvider&amp;gt;
       &amp;lt;App /&amp;gt;
   &amp;lt;/MediumProvider&amp;gt;
&amp;lt;/React.StrictMode&amp;gt;
);

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Access the data using useContext&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
//src/components/Home.js
import { useContext } from 'react'
import { MediumContext } from '../context/MediumContext'
export default function Home(){
const {posts, users} = useContext(MediumContext)
return(
&amp;lt;div&amp;gt;
&amp;lt;p&amp;gt;{posts.map(eachitem =&amp;gt; console.log(eachitem.title))}&amp;lt;p&amp;gt;
&amp;lt;/div&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
  </channel>
</rss>
