5 useWriteContract 有 writeContractAsync,useWaitForTransactionReceipt 有类似的,可以 wait 的 component 么?

比如在代码 https://github.com/linghuccc/multi-call-test/blob/main/src/App.tsx 中, 先完成 action 1,然后再执行 action 2。

在实践中,执行 action 1 的时候, await writeContractAsync 只能保证 startDelay transaction 已经 send 了,而 startDelay 这个 function 在链上执行需要一定时间,await writeContractAsync 并不能保证这个 transaction 已经完成了,所以在执行第二步 doSomething 的时候,有时会出错。

所以我想,如果 useWaitForTransactionReceipt 有类似的 component,就可以 await 它,确定 approve transaction 已经完成了,再执行下一步。

请先 登录 后评论

最佳答案 3小时前

将等待交易确认的逻辑移到组件的最顶层,或者使用另一个自定义的Hooks来封装这个逻辑

  const [action1Hash, setAction1Hash] = useState<string | null>(null);
  const [action2Hash, setAction2Hash] = useState<string | null>(null);

  const { writeAsync: writeContractAsync } = useWriteContract({
    abi: contractAbi,
    address: contractAddress,
  });

  const { isLoading: isAction1Loading, isSuccess: isAction1Success } = useWaitForTransactionReceipt({
    hash: action1Hash,
  });

  const { isLoading: isAction2Loading, isSuccess: isAction2Success } = useWaitForTransactionReceipt({
    hash: action2Hash,
  });
请先 登录 后评论

其它 2 个回答

Wade - Footprint Analytics CTO
  擅长:数据分析,GameFi,NFT
请先 登录 后评论
NPC.李括
请先 登录 后评论
  • 2 关注
  • 1 收藏,128 浏览
  • NPC.李括 提出于 2天前