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]);       // 当变量变化时弹出弹窗
}
相关推荐
前端工作日常18 小时前
我学习到的A2UI的功能:纯粹的UI生成
前端
Jing_Rainbow18 小时前
【 前端三剑客-37 /Lesson61(2025-12-09)】JavaScript 内存机制与执行原理详解🧠
前端·javascript·程序员
UIUV19 小时前
模块化CSS学习笔记:从作用域问题到实战解决方案
前端·javascript·react.js
aoi19 小时前
解决 Vue 2 大数据量表单首次交互卡顿 10s 的性能问题
前端·vue.js
Kakarotto19 小时前
使用ThreeJS绘制东方明珠塔模型
前端·javascript·vue.js
donecoding19 小时前
TypeScript `satisfies` 的核心价值:两个例子讲清楚
前端·javascript
德育处主任19 小时前
『NAS』在群晖部署一个文件加密工具-hat.sh
前端·算法·docker
cup11319 小时前
【原生 JS】支持加密的浏览器端 BYOK AI SDK,助力 Vibe Coding
前端
用户120391129472619 小时前
使用 Tailwind CSS 构建现代登录页面:从 Vite 配置到 React 交互细节
前端·javascript·react.js
杨进军19 小时前
模拟 Taro 实现编译多端样式文件
前端·taro