Получение TypeError: невозможно выполнить ‘get’ на прокси, который был отозван Redux toolkit

#javascript #redux #redux-toolkit

#javascript #redux #redux-toolkit

Вопрос:

Я пытаюсь извлечь данные из моей локальной базы данных 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
  

Ответ №1:

В redux, как правило, у вас не должно быть никаких побочных эффектов в редукторе — здесь происходит то, что вы запускаете побочный эффект, который запускается и позже попытается выполнить запись в хранилище вне редуктора (что нарушает другое правило redux).

Если у вас есть подобные побочные эффекты, вам нужно будет обработать это в промежуточном программном обеспечении. Обычно для этого используются thunks — пожалуйста, прочитайте Redux Essentials, часть 5: Асинхронная логика и выборка данных