Reactjs 如何使用定制挂钩>;

Reactjs 如何使用定制挂钩>;,reactjs,react-hooks,Reactjs,React Hooks,我正在将图像和该图像的标题上载到firebase。我已经做了一个自定义钩子(useStorage),用于上传图像和该图像的标题。我有两个独立的组件UploadForm和ProgressBar,我将标题和选定的图像和标题从UploadForm传递到ProgressBar。我能够在firestore中为图像和标题创建字段,图像正在上载,但标题字段仍然是空字符串 我附上3个文件的代码,任何帮助将不胜感激 从'react'导入{useState,useffect}; 从“../firebase/con

我正在将图像和该图像的标题上载到firebase。我已经做了一个自定义钩子(useStorage),用于上传图像和该图像的标题。我有两个独立的组件UploadForm和ProgressBar,我将标题和选定的图像和标题从UploadForm传递到ProgressBar。我能够在firestore中为图像和标题创建字段,图像正在上载,但标题字段仍然是空字符串

我附上3个文件的代码,任何帮助将不胜感激

从'react'导入{useState,useffect};
从“../firebase/config”导入{projectStorage,projectFirestore,timestamp};
const useStorage=(文件)=>{
const[progress,setProgress]=useState(0);
const[error,setError]=useState(null);
const[url,setUrl]=useState(null);
const[title,setTitle]=useState(“”);
useffect(()=>{
//参考资料
const storageRef=projectStorage.ref(file.name);
const collectionRef=projectFirestore.collection('images');
storageRef.put(file).on('state_changed',(snap)=>{
让百分比=(snap.bytesttransfered/snap.totalBytes)*100;
进度(百分比);
},(错误)=>{
设置错误(err);
},异步()=>{
const url=wait-storageRef.getDownloadURL();
const createdAt=时间戳();
wait collectionRef.add({url,createdAt,title});
setUrl(url);
片名(片名);
});
},[文件,标题];
返回{progress,url,error,title};
}

导出默认存储据我所知,你永远不会从任何地方得到
标题
。您所要做的就是将状态变量
title
发送到Firestore,然后
setTitle
发送到相同的空字符串
title


你的意思是将
标题
文件
一起传递到钩子中吗?

使用存储
有一个
[title,setTitle]
钩子,在

   await collectionRef.add({ url, createdAt, title });
   setUrl(url);
   setTitle(title);
但问题是标题是空的。你从不设定标题。将
标题传递给进度条,但不使用它。您应该更新useStorage两个take to参数:file和header,并调用
useStorage(file,header)

将useStorage签名更新为
const useStorage=(文件,头)=>{}

在useStorage内部,您可以更新
const[title,setTitle]=useState(header)

我遇到了问题,title是useStorage签名,从未使用header值更新过。但再加上一个论点,它就成功了。