首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用带reactfire的防火墙仿真器?

如何使用带reactfire的防火墙仿真器?
EN

Stack Overflow用户
提问于 2020-08-16 20:10:28
回答 3查看 1.2K关注 0票数 2

我已经在本地按照[消]火源文档设置了防火墙,并且我可以很容易地测试firebase函数。我很想在本地开发一个本地的消防站数据库。在文档中,它们提供以下代码:

代码语言:javascript
复制
// Initialize your Web app as described in the Get started for Web
// Firebase previously initialized using firebase.initializeApp().
var db = firebase.firestore();
if (location.hostname === "localhost") {
  db.settings({
    host: "localhost:8080",
    ssl: false
  });
}

如果我将反作用火与reactjs一起用于init防火墙,我如何做到这一点?目前,其初始化方式如下:

代码语言:javascript
复制
const firebaseConfig = {
  apiKey: "",
  authDomain: "example.firebaseapp.com",
  databaseURL: "https://example.firebaseio.com",
  projectId: "example",
  storageBucket: "example.appspot.com",
  messagingSenderId: "",
  appId: "",
  measurementId: ""
};

ReactDOM.render(
  <React.StrictMode>
    <FirebaseAppProvider firebaseConfig={firebaseConfig}>
      <App/>
    </FirebaseAppProvider>
  </React.StrictMode>,
  document.getElementById("root")
);

我是应该在配置中操作databaseURL:,还是有另一个最佳实践可以连接到本地模拟器防火墙?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-08-28 08:04:30

我发现了一个Github问题,它建议使用reactfire中的preloadFirestore

尽管它们在他们的示例应用程序中提供了一个示例

代码语言:javascript
复制
preloadFirestore(firebaseApp, firestore => { 
  return firestore().enablePersistence(); 
}), 

如果您想像他们一样使用它,那么您就有了这样的基本设置:

代码语言:javascript
复制
// create a preload function to combine multiple preloads
const preloadSDKs = firebaseApp => {
  return Promise.all([
    preloadFirestore(firebaseApp, firestore => {
      return firestore().settings({host: 'localhost:8080', ssl: false});
    }),
    // preloadDatabase(), 
    // preloadStorage(), 
    // etc.
  ]);
};

function App() {
  const firebaseApp = useFirebaseApp();

  // Kick off fetches for SDKs and data that
  // we know our components will eventually need.
  //
  // This is OPTIONAL but encouraged as part of the render-as-you-fetch pattern
  // https://reactjs.org/docs/concurrent-mode-suspense.html#approach-3-render-as-you-fetch-using-suspense
  preloadSDKs(firebaseApp).then(() => Promise.resolve());

  return (
    <YourComponents />
  )
}

之后,您可以在应用程序中的任何地方使用useFirestore()来惰性地加载上面的设置。

提示:

  • 在预装SDKs之前,必须使用<FirebaseAppProvider />
  • 组件预加载SDKs必须包装在<Suspense /><SuspenseWithPerf />组件中。
  • 检查reactfire演示应用程序,查看如何不仅预加载SDKs,而且还可以加载数据。
票数 0
EN

Stack Overflow用户

发布于 2021-04-25 19:58:59

谢谢你们的帮助!Reactfire api再次更改,这是当前的解决方案:

代码语言:javascript
复制
import React from 'react';
import logo from './logo.svg';
import './App.css';
import Answers from './components/answers'
import HomeScreen from './screens/HomeScreen'
import { preloadFirestore, useFirebaseApp } from 'reactfire'
import firebase from 'firebase'

const preloadSDKs = (firebaseApp: firebase.app.App) => {
  return Promise.all([
    preloadFirestore({
      firebaseApp,
      setup: firestore => {
      return firestore().settings({host: 'localhost:8080', ssl: false});
    }
    }),
    // preloadDatabase(),
    // preloadStorage(),
    // etc.
  ]);
};

function App() {
  const firebaseApp = useFirebaseApp();

  preloadSDKs(firebaseApp).then(() => Promise.resolve());

  return (
    <div className="App">
      <header className="App-header">
        <img src={logo} className="App-logo" alt="logo" />
        <HomeScreen />
      </header>
    </div>
  );
}

export default App;
票数 1
EN

Stack Overflow用户

发布于 2021-10-18 20:51:26

模拟上的反作用文档现在与先前的答案不同,它们是在2021年8月更新的。

我修改了他们的示例,向您展示了如何使用Firebase v9+的防火墙和auth仿真器

代码语言:javascript
复制
import { getAuth, connectAuthEmulator } from 'firebase/auth'; // Firebase v9+
import { getFirestore, connectFirestoreEmulator } from 'firebase/firestore'; // Firebase v9+

import { FirebaseAppProvider, DatabaseProvider, AuthProvider, useFirebaseApp } from 'reactfire';

function FirebaseComponents({ children }) {
  const app = useFirebaseApp();
  const firestore = getFirestore(app);
  const auth = getAuth(app);

  // Check for dev/test mode however your app tracks that.
  // `process.env.NODE_ENV` is a common React pattern
  if (process.env.NODE_ENV !== 'production') {
    // Set up emulators
    connectFirestoreEmulator(firestore, 'localhost', 8080);
    connectAuthEmulator(auth, 'http://localhost:9099');
  }

  return (
    <AuthProvider sdk={auth}>
      <FirestoreProvider sdk={firestore}>
        <MyCoolAppThatUsesAuthAndFirestore />
      </FirestoreProvider>
    </AuthProvider>
  );
}

类似的连接模式也存在于其他仿真器(connectStorageEmulatorconnectDatabaseEmulator等.)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63441516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档