Reactjs 在异步回调中使用useState钩子
我正在运行一个带有回调的异步操作(在本例中是ipfs,但这可能无关紧要),我正在尝试使用回调中的挂钩设置状态。但是代码没有运行…我需要在这里使用useEffect吗Reactjs 在异步回调中使用useState钩子,reactjs,react-hooks,Reactjs,React Hooks,我正在运行一个带有回调的异步操作(在本例中是ipfs,但这可能无关紧要),我正在尝试使用回调中的挂钩设置状态。但是代码没有运行…我需要在这里使用useEffect吗 await ipfs.add(buffer, (err, ipfsHash) => { setIpfsHash(ipfsHash); console.log("in ipfs - ipfshash", ipfsHash); }); setIpfsHash正在阻止内部代码。console.log不能以处
await ipfs.add(buffer, (err, ipfsHash) => {
setIpfsHash(ipfsHash);
console.log("in ipfs - ipfshash", ipfsHash);
});
setIpfsHash正在阻止内部代码。console.log不能以处理
IPF的方式运行。使用async/await
添加函数不正确。但是,是的,在这种情况下,您需要使用React.useffect
如果要使用async/await
,则需要创建一个新的承诺。在您的示例中,ifps.add(buffer,callback)
看起来它将回调作为参数,所以这不起作用
相反,把它变成承诺:
函数添加(缓冲区){
返回新承诺((解决、拒绝)=>{
常量ipfs=。。。
添加(缓冲区,(错误,ipfsHash)=>{
如果(错误){
拒绝(错误)
返回
}
解析(ipfsHash)
})
})
}
然后,您可以在React.useffect
中使用async/await
,如下例所示:
函数应用程序(){
常量[buffer,setBuffer]=React.useState(null)
const[ipfsHash,setIpfsHash]=React.useState(null)
React.useffect(()=>{
异步函数doWork(){
试一试{
常量结果=等待添加(缓冲区)
setIpfsHash(结果)
}捕获(错误){
//处理错误
}
}
嫁妆
},[buffer])
返回(
...
)
}
确保为useffect
钩子指定依赖项数组,以便它仅在需要时运行:
React.useffect(()=>{
// ...
},[buffer])
处理IPF的方式。使用async/await
添加函数是不正确的。但是,是的,在这种情况下,您需要使用React.useffect
如果要使用async/await
,则需要创建一个新的承诺。在您的示例中,ifps.add(buffer,callback)
看起来它将回调作为参数,所以这不起作用
相反,把它变成承诺:
函数添加(缓冲区){
返回新承诺((解决、拒绝)=>{
常量ipfs=。。。
添加(缓冲区,(错误,ipfsHash)=>{
如果(错误){
拒绝(错误)
返回
}
解析(ipfsHash)
})
})
}
然后,您可以在React.useffect
中使用async/await
,如下例所示:
函数应用程序(){
常量[buffer,setBuffer]=React.useState(null)
const[ipfsHash,setIpfsHash]=React.useState(null)
React.useffect(()=>{
异步函数doWork(){
试一试{
常量结果=等待添加(缓冲区)
setIpfsHash(结果)
}捕获(错误){
//处理错误
}
}
嫁妆
},[buffer])
返回(
...
)
}
确保为useffect
钩子指定依赖项数组,以便它仅在需要时运行:
React.useffect(()=>{
// ...
},[buffer])
你能在codesanbox.io上创建一个最小的复制示例吗?我看不出上述代码有任何问题。什么不起作用?ipfs很酷。你还有问题吗?你能在codesanbox.io上创建一个最小的复制示例吗?我看不出上面的代码有任何问题什么不起作用?ipfs的酷东西。你还有问题吗?