【问题标题】:Changing React state taking time so it takes old state in function logic更改 React 状态需要时间,因此它在功能逻辑中采用旧状态
【发布时间】:2021-05-27 12:50:12
【问题描述】:

我的子组件中有此功能,用于删除文档并使用setDocumentList 更新状态。但是当我通过快速单击删除 2-3 个文档时,它从初始状态过滤,我没有在newDocList 中获得更新状态,所以我的旧文档保持原样。并且 UI 仅针对最后一个文档进行了更新,因为更新状态需要时间。所以..如何处理这种情况请提出任何解决方案

提前致谢

    const deleteFile = (doc) => {

    Axios.delete(`url`).then((resp) => {
        let newDocList = [...documentList];
        newDocList = newDocList.filter(e => e.awsId != doc.awsId)
        setDocumentList(newDocList)
        if (props.onDocumentDeleted) props.onDocumentDeleted(newDocList)

    }).catch(error => {
        addMessageToDocUpload(doc, "Unable to delete file!", 'error')
    });

}

【问题讨论】:

  • 请修改使用句子标点符号。上面有一长串的话。

标签: reactjs react-hooks use-state


【解决方案1】:

在设置依赖于先前状态的状态时尝试使用回调参数:

 const deleteFile = (doc) => {
    Axios.delete(`url`).then((resp) => {
        setDocumentList(prevDocList => prevDocList.filter(e => e.awsId != doc.awsId));

    }).catch(error => {
        addMessageToDocUpload(doc, "Unable to delete file!", 'error')
    });

然后在新文档更新后将 useEffect 添加到派生计算:

useEffect(
    () => {
        if (props.onDocumentDeleted) { props.onDocumentDeleted(newDocList) }
    },
    [documentList]
);

【讨论】:

  • 不工作仍然无法删除多个
  • 不,我不可能需要使用 api 和这么多组件进行设置,最后一张图像的代码中发生了什么,当最后一张图像被删除时,它进入了无限循环。它在无限时间内调用useEffect方法,而不是文档数组没有任何变化
  • live:.cid.8f22757541a88ae4 如果可能,在 Skype 上连接将共享我的屏幕并显示给你
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-19
  • 1970-01-01
  • 1970-01-01
  • 2021-01-12
  • 2019-12-29
  • 2019-08-03
  • 1970-01-01
相关资源
最近更新 更多