reactjs - 从 IonModal 更新主页组件的状态得到 useEffect 错误
问题描述
我有一个 IonModal,我用它通过 API 调用将数据添加到我的数据库中。然后,我会将响应数据添加到我的 Redux 存储中的列表中,该列表显示在主页上。
在我的模态中按下按钮调用此函数以调用 API、获取响应、将其添加到商店并关闭模态:
const addData = async () => {
const transaction = await createTransaction(data);
dispatch(addTransaction(transaction));
setShowModal(false);
};
createTransaction 正在调用 API 并返回响应数据。
当它被调用并且模式关闭时,我收到此错误
警告:无法对未安装的组件执行 React 状态更新。这是一个空操作,但它表明您的应用程序中存在内存泄漏。要解决此问题,请在 useEffect 清理函数中取消所有订阅和异步任务。
在我的主页中,我只有一个简单的 useEffect ,它将组件内的状态设置为 redux 存储内的状态,并且应该更新组件内显示的内容,但不是:
const transactions = useSelector(state => state.transactions);
const [data, setData] = useState([]);
useEffect(() => {
setData(transactions);
}, [transactions]);
数据确实成功地添加到了 Redux Store,但它只是没有在主页上直观地更新。
任何帮助或建议将不胜感激。
解决方案
尝试将数据添加到 useEffect 数组,如下所示useEffect(() => {}, [transactions, data])
:本质上,useEffect 钩子所做的就是在每次感知到状态变量的变化时重新渲染。所以你的数据状态变量正在更新;但是,它没有在视觉上更新,因为它没有被告知要重新呈现数据更改。
推荐阅读
- javascript - 多个窗口使用 window.open() AND '
- python - AttributeError:“MySQL”对象没有属性“模型”
- javascript - Vanilla JavaScript - 仅使用事件冒泡选择“this”特定元素
- android - 在 Google Play 商店中打开应用程序
- node.js - 如何在此处触发错误页面的获取请求?
- node.js - Nodejs - 从生成的 bat 文件进程中隐藏窗口 | 视窗
- sql-server - 使用延迟加载时,Entity Framework 如何知道 X 实体有 Y 实体的集合?
- winforms - 在控制台应用程序中使用 RadDesktopAlert
- javascript - 尝试访问 facebook graph api 回调中的生成器函数功能
- java - 如何将 Java 解释为 Lua 数字以将纪元转换为人类可读