我在新的开源项目中使用毛毛雨和反应钩子,但是cacheSend输出总是"cacheSend不是一个函数“。
这一行代码与send按预期工作
const stackId = contract.methods.createMerchant(value.name, value.category, value.weburl).send({from: drizzleState.accounts[0]})相反,使用cacheSend返回一个错误"cacheSend不是函数“
const stackId = contract.methods["createMerchant"].cacheSend(value.name, value.category, value.weburl, {
from: drizzleState.accounts[0]
})每次在这个项目中使用cacheSend时,都会出现"cacheSend不是函数“错误。
我的index.js设置毛毛雨选项
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
// import drizzle functions and contract artifact
import { Drizzle } from "drizzle";
import Coupoken from "./contracts/Coupoken.json";
// let drizzle know what contracts we want and how to access our test blockchain
const options = {
contracts: [Coupoken],
web3: {
fallback: {
type: "ws",
url: "ws://127.0.0.1:9545",
},
},
};
// setup drizzle
const drizzle = new Drizzle(options);
ReactDOM.render(, document.getElementById('root'));这是我的App.js,我在这里加载组件
import React, { useState, useEffect, Fragment } from 'react'
import ReadString from "./ReadString";
import SetString from "./SetString";
import SetMerchant from "./SetMerchant";
import SetCoupon from "./SetCoupon";
const App = props => {
const [drizzleReadinessState, setDrizzleReadinessState] = useState({drizzleState: null, loading: true})
const { drizzle } = props
useEffect(
() => {
const unsubscribe = drizzle.store.subscribe( () => {
// every time the store updates, grab the state from drizzle
const drizzleState = drizzle.store.getState()
// check to see if it's ready, if so, update local component state
if (drizzleState.drizzleStatus.initialized) {
setDrizzleReadinessState({drizzleState: drizzleState, loading: false})
}
})
return () => {
unsubscribe()
}
}, [drizzle.store, drizzleReadinessState]
)
return (
drizzleReadinessState.loading ?
"Loading Drizzle..."
:
)
}
export default App我的组件
import React, { useState } from "react"
import { useForm } from "react-hook-form";
const SetMerchant = props => {
const [stackId, setStackID] = useState(null)
const { drizzle, drizzleState } = props
const { Coupoken } = drizzleState.contracts
const { register, handleSubmit, watch, errors } = useForm();
const onSubmit = data => {
setValue(data)
};
const setValue = value => {
const contract = drizzle.contracts.Coupoken
console.log(contract.methods["createMerchant"]);
// let drizzle know we want to call the `set` method with `value`
const stackId = contract.methods["createMerchant"].cacheSend(value.name, value.category, value.weburl, {
from: drizzleState.accounts[0]
})
// save the `stackId` for later reference
setStackID(stackId)
}
const getTxStatus = () => {
// get the transaction states from the drizzle state
const { transactions, transactionStack } = drizzleState
// get the transaction hash using our saved `stackId`
const txHash = transactionStack[stackId]
// if transaction hash does not exist, don't display anything
if (!txHash) return null;
// otherwise, return the transaction status
return `Transaction status: ${transactions[txHash] && transactions[txHash].status}`
}
return (
Register Merchant
Name
{errors.name && Use a valid input}
Category
{errors.category && Use a valid input}
Website
{errors.weburl && Use a valid input}
{getTxStatus()}
)
}
export default SetMerchant谢谢您抽时间见我
发布于 2020-05-24 12:26:51
解决了回滚打开齐柏林飞艇2.5.1和使用实用主义0.5.0,毛毛雨可能有一些不兼容的问题,最后一个开放齐柏林飞艇版本使用实用主义0.6版本。毛毛雨有兼容性问题,坚固度为0.6。
https://ethereum.stackexchange.com/questions/83667
复制相似问题