React 18/19 使用Ant Design全局弹窗message

react 18 及以上,拥有并发模式,不允许在渲染过程中直接触发副作用(如弹窗、网络请求等),应将其放至 useEffect 中,确保其在渲染完成后调用

javascript 复制代码
useEffect(() => {
    message.success('操作成功!');
  }, []); // 空依赖表示只在组件挂载时执行

否则会报错:

bash 复制代码
// 你在渲染中调用通知,它将被React 18并发模式打断。请改为触发生效。
You are calling notice in render which will break in
React 18 concurrent mode. Please trigger in effect instead.

单纯的将message放至useEffect中调用,会报错:

bash 复制代码
// 静态函数不能像动态主题那样消耗上下文。请使用"App"组件。
Warning: [antd: message] Static function can not consume 
context like dynamic theme. Please use 'App' component instead.

最终方法:

javascript 复制代码
// 1. 在 index.tsx 项目入口文件处使用App包裹
import {App as AntApp} from "antd";
......
function App() {
    return (
        <AntApp>
            <App />
        </AntApp>
    )
}
​
// 2. 在组件tsx文件中使用
import useApp from "antd/es/app/useApp";
......
function Component() {
    const {message} = useApp()
    useEffect(() => {
        // 自行添加条件,以控制弹窗出现时间
        message.info('弹窗内容')
    }, [oldMessage]);       // 当变量变化时弹出弹窗
}
相关推荐
red润23 分钟前
JavaScript 二维数组初始化:为什么 fill([]) 是个大坑?
前端·javascript·代码规范
一生躺平的仔30 分钟前
Electron 应用时间校准深度探索:从客户端策略到主进程优化
前端
wordbaby30 分钟前
从前端开发者视角解析依赖注入:解耦与可维护性的核心范式
前端
玲小珑31 分钟前
Auto.js 入门指南(一)什么是 Auto.js
android·前端
满分观察网友z36 分钟前
揭秘 Intersection Observer:让你的网页“活”起来!
前端·javascript
小佐_小佑37 分钟前
如何用 pnpm patch 给 element-plus 打补丁修复线上 bug(以 2.4.4 修复 PR#15197 为例)
前端
nvvas43 分钟前
前端Nodejs报错:Browserslist: caniuse-lite is outdated. Please run: npx update...
前端
Data_Adventure1 小时前
Vite 项目中使用 vite-plugin-dts 插件的详细指南
前端·vue.js
八戒社1 小时前
如何使用插件和子主题添加WordPress自定义CSS(附:常见错误)
前端·css·tensorflow·wordpress
xzboss1 小时前
DOM转矢量PDF
前端·javascript