首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Vuex和Onboard.js的最大调用堆栈大小超过错误

使用Vuex和Onboard.js的最大调用堆栈大小超过错误
EN

Stack Overflow用户
提问于 2021-11-12 00:55:35
回答 1查看 456关注 0票数 1

我试图使用Vuex和Onboard.js在我的DApp中存储一个web3提供程序,但是当我试图在我的状态中提交所选的钱包时,我一直得到一个Maximum call stack size exceeded,下面是我的文件的样子:

store/ethers.js

代码语言:javascript
复制
import { ethers } from 'ethers';
import Onboard from 'bnc-onboard';

export const state = () => ({
  address: '',
  onboard: null,
  wallet: null,
});

export const actions = {
  async initOnboard({ commit, state }) {
    const onboard = Onboard({
      networkId: 4,
      walletSelect: {
        wallets: [
          { walletName: 'metamask' },
        ],
      },
      subscriptions: {
        wallet: (wallet) => {
          // If I comment out this line it works...
          commit('SET_WALLET', wallet);

          localStorage.setItem('wallet', wallet.name);
        },
        address: (address) => {
          commit('SET_ADDRESS', address);
        },
      },
    });

    if (localStorage.getItem('wallet')) {
      await onboard.walletSelect(localStorage.getItem('wallet'));
    }

    commit('SET_ONBOARD', onboard);
  },
};

export const mutations = {
  SET_WALLET(state, wallet) {
    state.wallet = wallet;
  },
  SET_ONBOARD(state, onboard) {
    state.onboard = onboard;
  },
  SET_ADDRESS(state, address) {
    state.address = address;
  },
};

index.vue

代码语言:javascript
复制
<template>
  <button @click="connect">
    Connect
  </button>
</template>

<script>
import { mapActions } from 'vuex';

export default {
  mounted() {
    this.$store.dispatch('ethers/initOnboard');
  },
  methods: {
    ...mapActions('ethers', ['connect']),
  },
};
</script>

我不认为这是ethers库的问题,因为我把它换成了web3,并得到了同样的问题。如果我注释掉了commit('SET_WALLET', wallet);行,错误就消失了,但是我需要在我的应用程序中找到一种方法来访问它。

我想我在我的商店里对commits做了一些错误的事情,它导致了一些递归,但是我还没有弄清楚它是什么。

这里有一个问题的复制链接,您需要安装元a。如果您单击"connect“按钮并选择”元询问“,您将在控制台中看到错误。

预览: https://f6875.sse.codesandbox.io/

编辑器: https://codesandbox.io/s/upbeat-ardinghelli-f6875?file=/pages/index.vue

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-12 15:46:27

这个答案指向了我正确的方向:maximum calstack size exceeded on vuex commit

因此,在调用commit时冻结对象解决了以下问题:

代码语言:javascript
复制
commit('SET_WALLET', Object.freeze(wallet));

但我不知道这到底是为什么。

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

https://stackoverflow.com/questions/69936723

复制
相关文章

相似问题

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