我在哪里初始化React应用程序中的Firebase应用程序?

时间:2018-01-28 22:28:39

标签: javascript reactjs firebase

我正在尝试将Firebase集成到我的React应用程序中,在查看各种教程之后,我似乎无法就放置firebase初始化代码firebase.initializeApp(config)的位置达成共识。

我的应用程序结构如下:

- app.js
- components
   |___Index.jsx
   |___Layout.jsx
   |___PageContent.jsx

每个文件如下所示

app.js

是否所有使用服务器端呈现的快速设置

Index.jsx

import React from 'react';
import Layout from './Layout.jsx';
import PageContent from './PageContent.jsx';
import './global.css';

class Index extends React.Component {
  render() {
    return (
        <Layout title={this.props.title}>
            <PageContent />
        </Layout>
    );
  }
}

export default Index;

PageContent.jsx

import React from 'react';
import ReactDOM from 'react-dom';
import LandingPage from './components/Landing_Page/Landing.jsx';

class PageContent extends React.Component {
    render() {
        return (
            <LandingPage />
        );
    }
}

if (typeof window !== 'undefined') {
    ReactDOM.render(     
        <PageContent />,
        document.getElementById('root')        
    );
}

export default PageContent;

我需要确保Firebase在我网站的每个页面都可用。现在它是一个单页应用程序,但最终我将添加更多。

有人可以帮我理解我可能把数据库初始化代码放在哪里,以便它可以在任何地方应用吗?

3 个答案:

答案 0 :(得分:14)

这就是我的做法

Firebase.js旁边创建文件app.js并输入初始化代码

Firebase.js文件

import * as firebase from 'firebase';

let config = {
    apiKey: "XXXXXXX",
    authDomain: "XXXXX",
    databaseURL: "XXXXX",
    projectId: "XXXXX",
    storageBucket: "XXXX",
    messagingSenderId: "XXXX"
};
firebase.initializeApp(config);

export default firebase;

然后在每个要使用它的位置导入Firebase.js文件,例如

import React from 'react';    
import firebase from './../Firebase.js'     // <------  import firebase

class Test extends React.Component {

    componentDidMount(){
        firebase.database().ref().child("X").on('value' , {...});
    }

    render() {
        return (
            <h1>Hello</h1>
        );
    }
}

export default Test;

答案 1 :(得分:1)

您想要的是,firebase可以全局可用到您的反应组件。

在使用redux之前,同样的问题是,反应组件如何消耗全局状态树?全局变量?来吧,我们知道全局变量是邪恶的。反应道具?看起来很反应但是将道具从根部传递到叶子组件可能并不好玩。

Context API来救援。你只需要firebase绑定就像redux / react-router那样做出反应。

假设你不想重新发明轮子,

当然,您也可以通过刚才提到的反应上下文构建自己的反应firebase绑定。

答案 2 :(得分:0)

创建名为 firebase.js 的文件

import firebase from "firebase/app";
import "firebase/auth";
import "firebase/firestore";

const firebaseConfig = {
  apiKey: 'AIzaXXXXXXXXXXXXXXXXXXXXXXX',
  authDomain: 'test-XXXX.firebaseapp.com',
  databaseURL: 'https://test-db.firebaseio.com',
  projectId: 'test-XXXX',
  storageBucket: 'test-bucket.appspot.com',
  messagingSenderId: 'XXXXXXX',
  appId: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
};


firebase.initializeApp(firebaseConfig);
export const firebaseAuth = firebase.auth();
export const firestore = firebase.firestore()

然后使用如下:

import { firebaseAuth } from 'firebase'
import SigninForm from 'signin.js'

const ModalSignIn = props => {

  const [email, setEmail] = useState()
  const [password, setPassword] = useState()

  const handleSubmit = e => {
    e.preventDefault()
    firebaseAuth
      .signInWithEmailAndPassword(email, password)
      .then(res => {
        console.log(res.user)
      })
      .catch(err => {
        const { code, message } = err
        console.log(code, message)
      })
  }

  return (<SigninForm/>)