Это проект React с демо-версией системы уведомлений Mantine. Он имеет множество функциональных компонентов, использующих уведомление.
const A = () => {
useEffect(() => {
notifications.show({
// config
});
}, []);
return <></>;
};
const B = () => {
useEffect(() => {
notifications.show({
// config
});
}, []);
return <></>;
};
const C = () => {
useEffect(() => {
notifications.show({
// config
});
}, []);
return <></>;
};
Теперь у нас есть глобальное состояние с именем muteMode. Если пользователь включит это состояние, все уведомления отключатся. Поэтому мне нужно изменить код, как показано ниже.
const A = () => {
const { muteMode } = useGlobalState(state => state);
useEffect(() => {
if (muteMode) {
notifications.show({
// config
});
}
}, [muteMode]);
return <></>;
};
// The B、C function components are same as A
Я думаю, это не очень хороший код. Потому что я изменил все, что касается уведомлений. Если я добавлю дополнительную информацию об уведомлениях, мне придется внести изменения еще раз. Существует ли что-то вроде диспетчера уведомлений?





Вы можете создать собственный хук, чтобы не приходилось переписывать везде. Пример -
const useNotification = (config) => {
const { muteMode } = useGlobalState(state => state);
useEffect(() => {
if (muteMode) {
notifications.show(config);
}
}, [muteMode, config]);
return null;
};
В вашем компоненте используйте его так:
const A = () => {
useNotification({ title: 'Notification A' })
return <></>;
};
const B = () => {
useNotification({ title: 'Notification B' })
return <></>;
};
const C = () => {
useNotification({ title: 'Notification C' })
return <></>;
};
Надеюсь это поможет!
Что вы можете сделать, так это обернуть
notifiction.show()в собственную функцию. Теперь эта функция обрабатывает вещи на основе значения muteMode. По сути, вы создаете уровень абстракции (вы можете назвать его менеджером). Но это похоже на вопрос, основанный на мнениях, поскольку вы ищете разные подходы к «хорошему коду».