You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React(TSX)执行删除方法后如何更新组件?无需页面重载

解决React(TSX)中Sweetalert2删除后刷新列表的问题

不用整页刷新,直接通过React的状态更新就能实现列表刷新,具体方案如下:

核心逻辑

React是数据驱动视图的框架,只要更新存储列表数据的状态,组件就会自动重新渲染列表,完全不需要调用window.location.reload()这种粗暴的整页刷新方式。

具体实现步骤

1. 确保列表数据存在组件状态中

先把你的列表数据存在组件的useState状态里,示例如下:

import { useState, useEffect } from 'react';
import Swal from 'sweetalert2';

// 假设你的DataItem类型定义
type DataItem = {
  Id: number;
  // 其他字段根据实际情况补充
};

const YourComponent = () => {
  // 存储列表数据的状态
  const [items, setItems] = useState<DataItem[]>([]);

  // 页面初始化时获取列表数据
  useEffect(() => {
    const fetchItems = async () => {
      const response = await Api.get('api/stuff');
      setItems(response.data);
    };
    fetchItems();
  }, []);

2. 修改删除函数,更新状态

把原来的DeleteCard改成组件内的异步函数,在删除接口调用成功后,直接过滤掉状态里被删除的条目:

const DeleteCard = async (item: DataItem) => {
    const result = await Swal.fire({
      title: 'Are you sure?',
      text: "You won't be able to revert this!",
      icon: 'warning',
      showCancelButton: true,
      confirmButtonColor: '#3085d6',
      cancelButtonColor: '#d33',
      confirmButtonText: 'Yes, delete it!'
    });

    if (result.isConfirmed) {
      try {
        // 注意这里要用反引号包裹模板字符串,否则变量item.Id不会被解析
        await Api.delete(`api/stuff/${item.Id}`);
        Swal.fire('Deleted!', 'Your file has been deleted.', 'success');
        
        // 关键操作:更新列表状态,移除被删除的条目
        setItems(prevItems => prevItems.filter(i => i.Id !== item.Id));
      } catch (error) {
        // 处理删除失败的情况,给用户提示
        Swal.fire('Error!', 'Failed to delete the item.', 'error');
      }
    }
  };

3. 基于状态渲染列表

直接用items状态渲染你的列表即可,状态更新后列表会自动刷新:

return (
    <div>
      {items.map(item => (
        <div key={item.Id}>
          {/* 这里渲染你的卡片内容 */}
          <button onClick={() => DeleteCard(item)}>删除</button>
        </div>
      ))}
    </div>
  );
};

export default YourComponent;

重点提醒

  • 用async/await替代嵌套then,代码更清晰也更容易处理异步逻辑
  • 修正模板字符串语法:原来的单引号包裹无法解析变量,必须改成反引号`
  • 增加错误处理:接口调用可能失败,捕获异常能避免状态错误更新,同时给用户明确提示
  • 如果用了全局状态管理(比如Redux、Zustand),就在删除成功后dispatch对应的更新action,组件订阅状态变化后会自动刷新列表

内容的提问来源于stack exchange,提问作者James

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 05:05:21