在Reactjs/Next.js中呈现来自useEffect的组件[已关闭]

xpszyzbs  于 2022-11-05  发布在  React
关注(0)|答案(1)|浏览(171)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题吗?**通过editing this post添加详细信息并阐明问题。

13天前关闭。
Improve this question
我想为我的Next.js页面创建一个全局消息组件。
这就是我想要呈现组件的方式,只有一行,这样我就可以在我的应用程序中使用它。通过此调用,组件应该呈现。我不希望在每个特定页面的呈现部分加载组件。
呼叫来自一个页面:

import { MessageComponent } from '/components/message'
...
useEffect(() => { // 5000 for auto-hide message after 5 seconds
  setMessage('hello world!', 5000, ..other properties)
}

组件本身。snackbar来自Material UI。我使用了一个组件,以便将来可以更改实现。

export function MessageComponent({ message, autoHideDuration = 6000, severity = 'info', position = { vertical: 'bottom', horizontal: 'left', } }: MessageComponentProps {
...
return(
    <Snackbar
     anchorOrigin={{ vertical: position.vertical, horizontal: position.horizontal }}
      open={open}
      autoHideDuration={6000}
      action={action}
      >
          <Alert onClose={handleClose} severity="severity">
               {message}
          </Alert>
    </Snackbar>
 )
}

我如何在一个Next.js/Reactjs应用程序中实现它?我尝试了useContextuseRef。我不清楚如何实现它,也不清楚useContext是否是正确的方法。
(Yes我知道有NPM包谁提供这一点,但我想管理我自己的看法)。

vwkv1x7d

vwkv1x7d1#

我认为你最好的选择是使用一个减速器挂钩。看看Reactions UseReducer文档,但是使用它你应该能够达到你想要的。
您可以一直呈现MessageComponent,但使用CSS将其隐藏。您可以让MessageComponent的useEffect查找reducer消息状态的变化,当它发生变化时,将MessageComponent的className设置为可见的。使用setInterval再次将其关闭。我建议使用reducer的原因是,它就像useContext钩子,但是你有调度方法来改变状态,所以在每个触发消息的组件中,您可以调用dispatch方法-可能还传递消息的有效负载-这将改变由MessageComponent监视的reducers状态。
很抱歉没有示例代码,但是当我有时间的时候,我很乐意添加一些!

相关问题