首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >毛毛雨cacheSend输出"cacheSend不是函数“错误,但是tx在使用send时工作。

毛毛雨cacheSend输出"cacheSend不是函数“错误,但是tx在使用send时工作。
EN

Ethereum用户
提问于 2020-05-23 19:36:20
回答 1查看 491关注 0票数 2

我在新的开源项目中使用毛毛雨和反应钩子,但是cacheSend输出总是"cacheSend不是一个函数“。

这一行代码与send按预期工作

代码语言:javascript
复制
const stackId = contract.methods.createMerchant(value.name, value.category, value.weburl).send({from: drizzleState.accounts[0]})

相反,使用cacheSend返回一个错误"cacheSend不是函数“

代码语言:javascript
复制
const stackId = contract.methods["createMerchant"].cacheSend(value.name, value.category, value.weburl, {
  from: drizzleState.accounts[0]
})

每次在这个项目中使用cacheSend时,都会出现"cacheSend不是函数“错误。

我的index.js设置毛毛雨选项

代码语言:javascript
复制
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,我在这里加载组件

代码语言:javascript
复制
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

我的组件

代码语言:javascript
复制
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

github回购在这里提供

谢谢您抽时间见我

EN

回答 1

Ethereum用户

回答已采纳

发布于 2020-05-24 12:26:51

解决了回滚打开齐柏林飞艇2.5.1和使用实用主义0.5.0,毛毛雨可能有一些不兼容的问题,最后一个开放齐柏林飞艇版本使用实用主义0.6版本。毛毛雨有兼容性问题,坚固度为0.6。

票数 2
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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