我的React專案出現了一個問題,我之前沒有遇到過。我非常確定,這個問題是在我將 React 更新至 v17.0.0 以及其他一些庫之后開始出現的。
基本上,我的一個頁面有一個上傳圖片的輸入,它將檔案變成一個陣列緩沖區,并上傳到IPFS。它曾經作業過,但我最近再次測驗了它(在做了一些上述的包/庫更新之后),它現在給我的錯誤是TypeError。_utils_ipfs__WEBPACK_IMPORTED_MODULE_5__.default.files.add不是一個函式。
為了嘗試糾正這個錯誤,我嘗試了npm update,以確保所有東西都是最新的,但這并不奏效。
以下是我得到的控制臺錯誤:
getHash NewReview.js:18
NewReview NewReview.js:30。
React 5.
invokePassiveEffectCreate
呼叫回呼
invokeGuardedCallbackDev
invokeGuardedCallback
沖洗被動效果模版(flushPassiveEffectsImpl
unstable_runWithPriority scheduler.development.js:468
React 3
runWithPriority$1
沖洗被動效果
提交變異效果前
workLoop scheduler.development.js: 417
flushWork scheduler.development.js:390。
performWorkUntilDeadline scheduler.development.js:157
下面是我非常確定的NewReview.js中與錯誤有關的部分:
import ipfs from "./utils/ipfs"/span>。
export default function NewReview(){
const [ipfsHash, setIpfsHash] = useState(""/span>)。
const [buffer, setBuffer] = useState(null);
function getHash(){
ipfs.files.add(Buffer. from(buffer), (error, result) => {
if (error) {
console.error(error)
return。
}
setIpfsHash(result[0].hash)。
}});
useEffect(() => {
if (buffer) {
getHash()
}
});
/ ...
下面是ipfs.js的樣子:
const { create } = require('ipfs-http-client'/span>)。
const ipfs = create({host: 'ipfs.infura.io', port: 5001, protocol: 'https'})。)
export default ipfs。
作為糾正這個問題的另一個嘗試,我嘗試使用ipfs.default.files.add,因為我曾在另一個Stack Overflow帖子上看到過這個解決方案,但不幸的是這并不奏效。同樣,這段代碼曾經完美地作業過,所以我不確定這個問題的原因是由于代碼撰寫方式的錯誤。
感謝您的幫助! 如果你需要我詳細說明什么,請隨時詢問。
uj5u.com熱心網友回復:
我自己設法解決了我的問題! 以下是出錯的原因。
TypeError實際上是由于我從ipfs-api切換到ipfs-http-client。ipfs.files.add在ipfs-http-client中不是一個有效的函式,這解釋了為什么我得到了TypeError。我把這一行換成了ipfs.add,我就能讓它作業了。
我還想指出,我必須將ipfs.add作為async/await函式的一部分來使用,以便使其作業,因為否則它似乎根本不會執行。弄清楚這個問題是一個完全獨立的問題,我也花了相當多的時間來做。坦白地說,我不認為它需要成為async/await函式的一部分是非常好的記錄。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/331512.html
標籤:
