首页 > 解决方案 > 获取 TypeError:无法在已撤销 Redux 工具包的代理上执行“获取”

问题描述

我正在尝试从本地 sqlite 数据库中检索数据并使用某些值填充 redux 状态,我的减速器如下

    getItems: (state) => {
      try {
        useKnex
          .select()
          .table("itemTable")
          .then(async (data: any) => {
            state.push({
              itemId: parseFloat(data.itemId),
              itemCode: data.itemCode,
              itemDescription: data.itemDescription,
              itemSellingPrice: parseFloat(data.itemSellingPrice),
              itemType: data.itemType,
              createdAt: data.createdAt,
              updatedAt: data.updatedAt,
            });
            console.log(data);
          })
          .catch((err) => {
            console.error(`Error: ${err}`);
          });
      } catch (err) {
        console.log(err);
      }
    }

在我的内容页面上,我使用 useEffected 来获取用于测试目的的数据:

  useEffect(() => {
    dispatch(queryItemsAction());
  });

但是当我运行我得到的所有东西时:

Error: TypeError: Cannot perform 'get' on a proxy that has been revoked

标签: javascriptreduxredux-toolkit

解决方案


一般来说,在redux中,你不能在reducer中有任何副作用——这里发生的是你触发了一个运行的副作用,稍后会尝试在reducer之外写入存储(这违反了redux的另一个规则) .

如果你有这样的副作用,你需要在中间件中处理它。通常,thunk 用于此 - 请阅读Redux Essentials,第 5 部分:异步逻辑和数据获取


推荐阅读