NFT价格更新功能报错:invalid decimal value问题求助
错误分析与修复方案
错误原因
你传递给updatePrice函数的newPrice是整个formInput对象({price: "输入的价格"}),而非具体的价格数值。当代码执行newPrice.toString()时,对象会被转为字符串[object Object],导致ethers.utils.parseUnits无法解析这个无效的十进制值,直接抛出INVALID_ARGUMENT错误。
修复步骤
1. 传递正确的价格参数
修改HTML中Button的点击事件,将formInput改为formInput.price,确保传入的是具体的价格值:
<div className='flex flex-col w-full'> <Input inputType='number' title='Update listing price' placeholder='Enter new listing price here ...' handleClick={(e) => {setFormInput({...formInput, price: e.target.value})}} /> <Button buttonType='primary' innerText='Update price' parentStyles='mt-5 rounded-full' handleClick={() => handleUpdatePrice(NFT.tokenId, formInput.price)} /> </div>
2. 增加参数校验(可选但推荐)
在updatePrice函数中加入基础校验,避免传入空值或非数值类型:
const updatePrice = async (tokenId, newPrice) => { // 校验价格有效性 if (!newPrice || isNaN(Number(newPrice))) { console.error("请输入有效的价格数值"); return; } const web3Modal = new Web3Modal(); const connection = await web3Modal.connect(); const provider = new ethers.providers.Web3Provider(connection); const signer = provider.getSigner(); const contract = signerOrProvider(signer); console.log('New price', newPrice); console.log('Token ID', tokenId); await contract.updatePrice(tokenId, ethers.utils.parseUnits(newPrice.toString(), 'ether')); }
3. 优化输入值处理(可选)
确保输入框的值被正确处理,比如去除空格:
// 修改Input的handleClick事件 handleClick={(e) => {setFormInput({...formInput, price: e.target.value.trim()})}}
内容的提问来源于stack exchange,提问作者bela jonas
相关产品推荐
相关产品推荐

