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

react-toastify随机报错:无法解构u.props的position属性,页面切换后崩溃

解决react-toastify切换页面后崩溃:Cannot destructure property 'position' of 'u.props' as it is undefined

可能的原因

  • ToastContainer被页面卸载:如果把ToastContainer放在某单个页面组件中,切换页面时该组件被卸载,后续调用toast时找不到挂载的容器,导致内部props解构失败。
  • 异步操作延迟触发toast:页面切换前发起的异步请求(比如接口调用)在页面卸载后才完成,此时调用toast但容器已不存在。
  • 版本兼容性bug:react-toastify版本与React版本不兼容,或者特定版本存在已知的容器挂载问题。

解决方案

1. 将ToastContainer挂载到全局根组件

确保ToastContainer在整个应用生命周期内都存在,不要放在单个页面组件里。示例:

// 根组件(如App.jsx)
import { ToastContainer } from 'react-toastify';
import 'react-toastify/dist/ReactToastify.css';

function App() {
  return (
    <>
      {/* 你的路由组件或页面入口 */}
      <ToastContainer 
        position="top-right" 
        autoClose={5000}
        closeOnClick
        pauseOnHover
      />
    </>
  );
}

2. 组件卸载时取消异步操作或检查挂载状态

如果是异步操作导致的延迟toast调用,在组件卸载时标记状态,避免在组件卸载后执行toast:

import { useRef, useEffect } from 'react';
import { toast } from 'react-toastify';

function YourPageComponent() {
  const isMounted = useRef(true);

  useEffect(() => {
    // 组件卸载时更新标记
    return () => {
      isMounted.current = false;
    };
  }, []);

  const handleAsyncAction = async () => {
    try {
      const response = await fetch('/your-api-endpoint');
      const data = await response.json();
      
      // 仅在组件挂载时调用toast
      if (isMounted.current) {
        toast.success('操作成功');
      }
    } catch (error) {
      if (isMounted.current) {
        toast.error('操作失败');
      }
    }
  };

  return <button onClick={handleAsyncAction}>执行异步操作</button>;
}

3. 更新或回退react-toastify版本

尝试更新到最新稳定版本,修复可能存在的bug:

npm update react-toastify

如果最新版本仍有问题,可以回退到已知稳定的版本(比如v9.1.3):

npm install react-toastify@9.1.3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 06:33:09