首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Wagmi中向usePrepareContractWrite传递动态参数

在Wagmi中向usePrepareContractWrite传递动态参数
EN

Ethereum用户
提问于 2022-09-09 05:17:57
回答 2查看 1.3K关注 0票数 3

使用usePrepareContractWrite处理逻辑流

代码语言:javascript
复制
const { config: contractWriteConfig } = usePrepareContractWrite({
    ...contractConfig,
    functionName: 'mint',
    args: [numToMint],
    overrides: {
        value: ethers.utils.parseEther(payment),  //how do I dynamically change this number on the fly to string
      },
  });
代码语言:javascript
复制
const {
    data: mintData,
    write: mintBee,
    isLoading: isMintLoading,
    isSuccess: isMintStarted,
    error: mintError,
  } = useContractWrite(contractWriteConfig);

简而言之,我用一个句柄事件来表示这个数字的薄荷。之前,我可以将numToMint乘以成本金额,并将其转换为另一个函数中的字符串。现在,对于usePrepareContractWrite(),我不确定如何处理这个问题,因为我不能将参数传递给"mintBee“写函数。任何例子都是非常感谢的!

EN

回答 2

Ethereum用户

发布于 2023-01-25 08:04:38

基本上,@deepak是正确的,但是他的useEffect将触发一个无限循环,我们也可以通过使用useDebounce (如瓦格米博士中所建议的)使其更好一些。

代码语言:javascript
复制
import * as React from 'react'
import { ethers } from 'ethers'
import { usePrepareContractWrite, useContractWrite } from 'wagmi'

import { useDebounce } from './useDebounce'
import contractConfig from './contract-config'

export default function MintComponent() {
  const [numToMint, setNumToMint] = React.useState(0)
  const [payment, setPayment] = React.useState(0)

  const debouncedNumToMint = useDebounce(numToMint)
  const debouncedPayment = useDebounce(payment)

  const { config: contractWriteConfig } = usePrepareContractWrite({
    ...contractConfig,
    functionName: 'mint',
    args: [debouncedNumToMint],
    overrides: {
      value: ethers.utils.parseEther(debouncedPayment.toString()),
    },
  })

  const { write: mintBee } = useContractWrite(contractWriteConfig)

  return (
    <form
      onSubmit={e => {
        e.preventDefault()
        mintBee?.()
      }}>
      <label htmlFor='payment'>Payment</label>
      <input
        id='payment'
        type='number'
        onChange={e => setPayment(e.target.value)}
        value={debouncedPayment}
      />
      <label htmlFor='numToMint'>Num to mint</label>
      <input
        id='numToMint'
        type='number'
        onChange={e => setNumToMint(e.target.value)}
        value={debouncedNumToMint}
      />

      <button disabled={!mintBee}>Mint</button>
    </form>
  )
}
票数 1
EN

Ethereum用户

发布于 2022-10-06 12:39:07

我认为这应该是可行的,因为状态的改变将触发重登的钩子。

代码语言:javascript
复制
const [numToMint, setNumToMint] = React.useState()

const { config: contractWriteConfig } = usePrepareContractWrite({
    ...contractConfig,
    functionName: 'mint',
    args: [numToMint],
    overrides: {
        value: ethers.utils.parseEther(payment)
      },
  });

const {
    data: mintData,
    write: mintBee,
    isLoading: isMintLoading,
    isSuccess: isMintStarted,
    error: mintError,
  } = useContractWrite(contractWriteConfig);

React.useEffect(() =>{
    setNumToMint((numToMint * costAmount).toString())
},[numToMint])
票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/135283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档