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

React.js中点击Bootstrap模态框按钮后如何实现组件重新渲染

问题根因

你调用删除接口成功后仅修改了delUser变量,并没有更新渲染用户列表所依赖的State,React检测不到列表数据源的变化,自然不会触发组件重渲染。

解决方案

假设你渲染用户列表的State声明为(实际项目中变量名可能不同,自行替换即可):

const [userList, setUserList] = useState([]);

你可以二选一以下方案修改handleDelete函数:

方案1:本地过滤更新(性能最优,无需额外发请求)

删除接口调用成功后,直接从现有列表中过滤掉已删除的用户,更新列表State即可:

const handleDelete = async () => {
  if (delUser === admin) {
    toast.error("Cannot delete the default admin!");
    return;
  } else {
    try {
      await Http.post(`${Config.apiUrl}/users/delete`, {
        email: delUser,
      });
      // 新增:过滤掉已删除的用户,更新列表State
      setUserList(prevList => prevList.filter(user => user.userEmail !== delUser))
      setDelUser("");
      toast.success("用户删除成功")
    } catch (ex) {
      if (ex.response && ex.response.status === 404) {
        toast.error(ex.response.data);
      }
    }
  }
};

方案2:重新拉取最新用户列表(适合数据需要实时同步多端修改的场景)

如果你页面初始化时是调用getUserList这类接口获取用户列表的,删除成功后重新调用一次该方法更新列表即可:

// 替换为你项目中实际拉取用户列表的方法
const getUserList = async () => {
  const res = await Http.get(`${Config.apiUrl}/users/list`)
  setUserList(res.data)
}

const handleDelete = async () => {
  if (delUser === admin) {
    toast.error("Cannot delete the default admin!");
    return;
  } else {
    try {
      await Http.post(`${Config.apiUrl}/users/delete`, {
        email: delUser,
      });
      // 新增:重新拉取最新列表
      await getUserList()
      setDelUser("");
      toast.success("用户删除成功")
    } catch (ex) {
      if (ex.response && ex.response.status === 404) {
        toast.error(ex.response.data);
      }
    }
  }
};

补充说明

两种方案都不需要全页刷新,只要列表State更新,React会自动帮你重渲染列表对应的DOM部分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:36:02