我已经在本地按照[消]火源文档设置了防火墙,并且我可以很容易地测试firebase函数。我很想在本地开发一个本地的消防站数据库。在文档中,它们提供以下代码:
// 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防火墙,我如何做到这一点?目前,其初始化方式如下:
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:,还是有另一个最佳实践可以连接到本地模拟器防火墙?
发布于 2020-08-28 08:04:30
我发现了一个Github问题,它建议使用reactfire中的preloadFirestore。
尽管它们在他们的示例应用程序中提供了一个示例
preloadFirestore(firebaseApp, firestore => {
return firestore().enablePersistence();
}), 如果您想像他们一样使用它,那么您就有了这样的基本设置:
// 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()来惰性地加载上面的设置。
提示:
<FirebaseAppProvider />。<Suspense />或<SuspenseWithPerf />组件中。发布于 2021-04-25 19:58:59
谢谢你们的帮助!Reactfire api再次更改,这是当前的解决方案:
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;发布于 2021-10-18 20:51:26
模拟上的反作用文档现在与先前的答案不同,它们是在2021年8月更新的。
我修改了他们的示例,向您展示了如何使用Firebase v9+的防火墙和auth仿真器
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>
);
}类似的连接模式也存在于其他仿真器(connectStorageEmulator,connectDatabaseEmulator等.)
https://stackoverflow.com/questions/63441516
复制相似问题