在 React 中是否需要非渲染触发全局变量的情况?



我有全局状态通过Context/AppState/AppStateDispatch工作。我也有组件状态通过 useState 工作。

但有时避免使用这些可能会有所帮助:

  • 我们需要立即访问当前函数中的值,并且不能等待下一次渲染来获取它。通过useState/AppStateDispatch存储它将阻止该值在下一次渲染之前可访问

  • 。而且,整个应用程序全局都需要这些相同的值

  • 。并且 useRef 将在组件卸载时被销毁

在这种情况下,似乎适合使用全局可用的非呈现导致的对象来保存这些项的状态。

这很容易实现...但它似乎不是反应性的。我错过了什么吗?

过去几天我对此进行了广泛的研究。以下是一些观察结果。

在我的用例中,我使用的是外部webRTC服务。他们的代码要求我的应用程序安装侦听器,以用于来电、响应视频流的发布等。列表器需要访问组件的 webRTC 特定变量

同时,这些变量不能是组件状态或应用状态的一部分,因为在更新时,它们的值在下次刷新之前不可用,并且组件的其余部分需要在当前呈现中访问它们。

当然,使用独立于 React 并且不触发刷新的应用程序全局变量是笨拙的。

这是我目前使用的方法。到目前为止,它似乎很有帮助。

  • 创建一个应用程序状态对象来存储与我的组件使用 webRTC 相关的所有变量。
  • 通过调用函数来初始化它,getWebRTCDefaults().
  • 在组件装载时,将其从应用状态复制到组件级变量。注意 - 它不处于组件状态 - 它是一个组件级变量,可在组件中的任何位置访问。
  • 因此,它可以随时在组件内更新,并且其值在整个组件中立即可用。
  • 当调用开始和结束时 - 只有这样 - 我使用React context dispatch来更新应用程序状态对象。 即我不通过useEffect更新该对象,因为这可能会导致不必要的渲染。

这种方法似乎很有帮助。我可以卸载组件,当我重新安装它时,它会从中断的地方继续 - webRTC视频仍在运行。

相关内容

  • 没有找到相关文章

最新更新