今天给小窝后台项目增加了全局消息组件,实现与之前我 Vue 3 的版本类似,但有不同的点就是将事件触发换成了回调函数。React 组件挂载时注册一个,离开的时候销毁掉。每次添加一个消息的时候都会执行回调函数,将信息同步到 React 组件上,这样就可以将消息组件挂在顶层,任意子组件随时调用了。
// React 消息组件部分
useEffect(() => {
const fn = (notice: NoticeItem) => {
setItems((prevItems) => [...prevItems, notice]);
};
addFn(fn);
return () => {
removeFn(fn);
};
}, []);
...
// 其他组件调用
add({
title: "错误",
content: `歌曲来源有问题!${err.message}`,
});