reactjs - VSCode中JavaScript React项目的Firebase智能感知/自动完成
问题描述
我正在开发一个 React 和 Firebase 项目,但在我的代码上设置自动完成时遇到了麻烦(我正在使用 VScode)。
这是我到目前为止所得到的:
我如何为我的应用程序组件提供 Firebase(通过上下文)
FirebaseContext.js
import React from 'react';
const FirebaseContext = React.createContext(null);
export default FirebaseContext;
firebase.js
import firebase from 'firebase/app';
import 'firebase/auth';
import 'firebase/firestore';
import 'firebase/functions';
// .env file in root folder
const config = {
apiKey: process.env.FIREBASE_APP_API_KEY,
authDomain: process.env.FIREBASE_APP_AUTH_DOMAIN,
databaseURL: process.env.FIREBASE_APP_DATABASE_URL,
projectId: process.env.FIREBASE_APP_PROJECT_ID,
storageBucket: process.env.FIREBASE_APP_STORAGE_BUCKET,
messagingSenderId: process.env.FIREBASE_APP_MESSAGING_SENDER_ID
};
firebase.initializeApp(config);
firebase.functions().useFunctionsEmulator('http://localhost:5000');
export default firebase;
index.js
import React from 'react';
import ReactDOM from 'react-dom';
import firebase from './helpers/firebase/firebase';
import FirebaseContext from './helpers/firebase/FirebaseContext';
import { BrowserRouter as Router} from "react-router-dom";
...
ReactDOM.render(
// HERE'S HOW I'M PROVIDING FIREBASE FOR MY APP
<FirebaseContext.Provider value={firebase}>
<Router>
<App/>
</Router>
</FirebaseContext.Provider>
,document.getElementById('root')
);
我如何在我的组件中使用 Firebase
添加ProductContainer.js
import React, { useEffect, useState, useCallback, useContext } from 'react';
import FirebaseContext from '../../../helpers/firebase/FirebaseContext';
function AddProductContainer() {
const firebase = useContext(FirebaseContext);
function saveToFirestore() {
// I DON'T HAVE ANY AUTOCOMPLETION FROM 'FIREBASE...'
firebase.firestore().collection('products').add({
title: productDetails.title.newTitle,
description: productDetails.description,
categories: productDetails.categories
});
}
}
问题
如何在 JavaScript 项目中从 Firebase 获取自动完成功能?
注意:我所有的组件文件都是.js
. 我没有使用打字稿。
在这种情况下,有没有办法使用 JSDoc 注释来访问自动完成功能?
就像是:
/** @type {firebase} */
const firebase = useContext(FirebaseContext);
解决方案
在没有 Typescript 或其他东西的情况下这样做肯定会非常棘手,但我可以建议另一种选择吗?
我认为没有必要将firebase
对象本身放在上下文中。如果您要使用多个应用程序或只是想明确说明,则放入上下文可能是有意义的(从 中返回的对象),但在app
任何使用它的文件中直接导入()似乎更有意义. 如果您担心的是,它不会创建第二个 firebase 实例或任何东西,它只是 firebase 库的句柄。只要先运行,它就会选择您初始化的默认应用程序。 创建一个全局默认的 Firebase 应用程序,任何 Firebase 方法的调用都会被调用。firebase.initializeApp
firebase
import firebase from 'firebase/app'
firebase.initializeApp()
initializeApp()
initializeApp()
如果您对全局变量不满意,您可以通过分配来明确您正在使用的特定应用程序const app = firebase.initializeApp(...)
,然后app
通过 props 或上下文传递,然后始终使用作为参数调用 firebase 包app
,例如firebase.firestore(app).collection('products').etc...
.
但是firebase
直接在你使用它的任何文件的顶部导入包应该是免费的(并且想要自动完成)。
推荐阅读
- python-3.x - 使用 numpy 确定两个矩阵之间的距离
- python - 如何将 X 定义为列值?
- python - 如何制作statsmodels vector Autoregression可以识别的年份索引?
- javascript - 反应 useState 钩子并以多步形式提交
- python - 更改不和谐机器人昵称 (discord.py)
- ios - 在支持 iOS 13.0 的同时在 iOS 14.0 中使用 @StateObject
- php - 在laravel中输入文本时如何附加?
- css - 如何使用 CSS 仅显示部分字符串
- c - 时间复杂度的可加性?
- c# - Task.Run() 的这种用法是不好的做法吗?