Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs Firestore的React钩子类型不正确_Reactjs_Typescript_Google Cloud Firestore_React Hooks - Fatal编程技术网

Reactjs Firestore的React钩子类型不正确

Reactjs Firestore的React钩子类型不正确,reactjs,typescript,google-cloud-firestore,react-hooks,Reactjs,Typescript,Google Cloud Firestore,React Hooks,我有一个用于查询特定Firebase Firestore集合/文档的自定义钩子 import { useContext, useEffect, useState } from 'react'; import { FirebaseContext } from 'providers/Firebase/FirebaseContextProvider'; const useFireStore = ( collection: string, doc: string, loadingDela

我有一个用于查询特定Firebase Firestore集合/文档的自定义钩子

import { useContext, useEffect, useState } from 'react';

import { FirebaseContext } from 'providers/Firebase/FirebaseContextProvider';

const useFireStore = (
  collection: string,
  doc: string,
  loadingDelay: number = 0,
) => {
  const { firestore } = useContext(FirebaseContext);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState(null);
  const [document, setDocument] = useState<
    firebase.firestore.DocumentData | undefined
  >();

  useEffect(() => {
    setLoading(true);
    setDocument(undefined);
    const docRef = firestore.collection(collection).doc(doc);
    docRef
      .get()
      .then(doc => {
        setDocument(doc.data());
        setTimeout(() => {
          setLoading(false);
        }, loadingDelay);
      })
      .catch(e => {
        setError(e);
        setLoading(false);
      });
  }, [collection, loadingDelay, doc, firestore]);

  return [document, loading, error];
};

export default useFireStore;
当我在钩子中的
const[document,setDocument]=useState
中将鼠标悬停在
document
上时,我看到
document
类型将是:

const文档:firebase.firestore.DocumentData |未定义

但是,当我将鼠标移到组件中的
const[details,loading,error]=…
中的
document
上时,我看到可能的类型如下:

const详细信息:boolean | firebase.firestore.DocumentData | null |未定义


这可能是从哪里来的
boolean
null

我通过键入
useFireStore
钩子的返回来解决这个问题,例如:

const useFireStore = (
  collection: string,
  doc: string,
  loadingDelay: number = 0,
): [firebase.firestore.DocumentData | undefined, boolean, Error | null] => {
...
}
const useFireStore = (
  collection: string,
  doc: string,
  loadingDelay: number = 0,
): [firebase.firestore.DocumentData | undefined, boolean, Error | null] => {
...
}