#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: Асинхронная логика и выборка данных