javascript - 如何仅在使用 React 将某些内容添加到数组时才运行 useEffect?

标签 javascript reactjs

我有一个存储在状态中的警报列表:

const [alerts, setAlerts] = useState([]);

我将所有错误和通知推送到此列表,然后显示在警报框中。我想要的是在 3000ms 之后自动弹出添加的警报。这是我必须执行的操作:

useEffect(() => {
  setTimeout(() => {
    setAlerts([...alerts].splice(0, 1));
  }, 3000);
}, [alerts]);

但是,我得到的是一个被触发的无限循环,因为即使我从该警报中删除它,它也会发生变化。所以我想我只需要在警报数组中添加某些内容时触发上面的代码。有什么想法吗?

最佳答案

不使用效果:


const [alerts,setAlerts] = useState([]);

const handleAddAlert = (alert) => {
   setTimeout(() => setAlerts(alerts.filter(a => a !== alert)),3000);
   setAlerts([...alerts,alert]);
}


// instead of calling `setAlerts` in your code down here, call `handleAddAlert` with the alert

关于javascript - 如何仅在使用 React 将某些内容添加到数组时才运行 useEffect?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60652882/

相关文章:

javascript - Node.js:全局变量是否在实例之间共享?

javascript - AJAX 请求中的 PHP session 变量

javascript - 多个数据字段的 jQuery DataTables 列定义

javascript - 使用 Axios 和 Redux 更新用户字段

javascript - Reactjs OnClick 添加更多列表

javascript - PHP 不生成 Excel 文件

javascript - 浏览器如何处理 <template> 标签 VS <div> 标签

javascript - React Redux 过滤滞后一步

reactjs - 在 React 中向 div 添加切换类

javascript - 如何在 react js中单击按钮或图标单击打开日期选择器