我想要一个通知组件,该组件将放置在应用程序的顶级根目录中。由于我正在使用material-ui snackbar
,因此需要更改组件的open
属性,可以从state中提供它。我想放置一次组件,并使用某种通知方法,该方法将在需要时导出和使用。
现在,我用useContext
解决了这个问题,但我认为这不是一个好的解决方案:
import React,{ createContext,useState,useContext } from 'react';
import Notification from './snackbar';
const NotificationContext = createContext();
export default props => {
const [message,setMessage] = useState(null);
const [opened,setOpened] = useState(false);
const notificate = ({message}) => {
setMessage(message);
setOpened(true);
}
const close = () => {
setMessage(null);
setOpened(false);
};
const { children } = props;
return (
<NotificationContext.Provider
value={{
notificate
}}
{...props}
>
<snackbar
open={opened}
message={message}
onClose={close}
anchorOrigin={{
vertical: 'bottom',horizontal: 'left'
}}
autoHideDuration={4000}
/>
{children}
</NotificationContext.Provider>
);
};
export const useNotification = () => useContext(NotificationContext);
有什么建议可以解决吗?可以使用“错误边界”解决吗?