Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript VUEX&;WEB3:重复的方法构造函数。此方法定义为RPC调用和对象方法_Javascript_Vue.js_Vuex_Web3 - Fatal编程技术网

Javascript VUEX&;WEB3:重复的方法构造函数。此方法定义为RPC调用和对象方法

Javascript VUEX&;WEB3:重复的方法构造函数。此方法定义为RPC调用和对象方法,javascript,vue.js,vuex,web3,Javascript,Vue.js,Vuex,Web3,在VueX内部部署my web3时出现以下问题: TypeError:重复的方法构造函数。此方法定义为RPC调用和对象方法。 我推断,这个问题存在于setupWeb3操作中的web3声明中(见下文) 我想是打字的问题吧 任何想法都将不胜感激 编辑: 我在main.ts中声明一个全局命名空间,如下所示: declare global { interface Window { ethereum:any; web3:any; } } 以下是我的行动: export c

在VueX内部部署my web3时出现以下问题:

TypeError:重复的方法构造函数。此方法定义为RPC调用和对象方法。

我推断,这个问题存在于setupWeb3操作中的web3声明中(见下文)

我想是打字的问题吧

任何想法都将不胜感激

编辑:

我在main.ts中声明一个全局命名空间,如下所示:

declare global {
  interface Window {
      ethereum:any;
      web3:any;
  }
}
以下是我的行动:

export const actions: ActionTree<Network, RootState> = {
    setupWeb3(context: ActionContext<Network, RootState>) {
        let web3;
        if (window.ethereum) {
            web3 = new Web3(window.ethereum);
            window.ethereum.enable().then(enabled => console.log(enabled));
        } else if (window.web3) {
            web3 = new Web3(window.web3.currentProvider);
        } else {
            // TODO better handle of metamask
            window.alert(
                'Non-Ethereum browser detected. You should consider trying MetaMask!',
            );
        }
        context.commit('SET_WEB3', web3);
    },
    async getNetworkData(context: ActionContext<Network, RootState>) {
        const { Web3 } = context.getters;
        const network = await Web3.eth.net.getNetworkType();
        const networkId = await Web3.eth.net.getId();
        const currentBlock = await Web3.eth.getBlockNumber();
        context.commit('SET_NETWORK_DATA', {
            network,
            networkId,
            currentBlock,
        });
    },
    getAddress(context: ActionContext<Network, RootState>) {
        const { Web3 } = context.getters;
        Web3.eth.getAccounts().then((account: string[]) => 
            context.commit("SET_ADDRESS", account[0]));
    },
    bootstrapContracts(context: ActionContext<Network, RootState>) {
        const setupWeb3 = context.dispatch('setupWeb3');
        const network   = context.dispatch('getNetworkData');
        const address   = context.dispatch('getAddress');
        Promise.all([setupWeb3, network, address,])
            .then(() => {
                context.dispatch('setupLootControls');
            });
    },
};
导出常量操作:ActionTree={
setupWeb3(上下文:ActionContext){
让web3;
if(window.ethereum){
web3=新的web3(window.ethereum);
然后(enabled=>console.log(enabled));
}else if(window.web3){
web3=新的web3(window.web3.currentProvider);
}否则{
//TODO更好地处理元掩码
窗口警报(
“检测到非EnthUM浏览器。您应该考虑尝试元模!”
);
}
commit('SET_WEB3',WEB3);
},
异步getNetworkData(上下文:ActionContext){
const{Web3}=context.getters;
const network=wait Web3.eth.net.getNetworkType();
const networkId=wait Web3.eth.net.getId();
const currentBlock=wait Web3.eth.getBlockNumber();
commit('SET\u NETWORK\u DATA'{
网络,,
networkId,
当前块,
});
},
getAddress(上下文:ActionContext){
const{Web3}=context.getters;
Web3.eth.getAccounts().then((帐户:string[])=>
commit(“SET_ADDRESS”,account[0]);
},
bootstrapContracts(上下文:ActionContext){
const setupWeb3=context.dispatch('setupWeb3');
const network=context.dispatch('getNetworkData');
const address=context.dispatch('getAddress');
Promise.all([setupWeb3,网络,地址,]))
.然后(()=>{
分派('setupLootControls');
});
},
};

证明我是在测试版上,通过升级到

“web3”:“^1.2.9”


为我修正了错误。以防其他人也有同样的问题!:)

原来我是在测试版上,升级到

“web3”:“^1.2.9”

为我修正了错误。以防其他人也有同样的问题!:)