反应(本机)动画-部分卸载组件

时间:2019-11-01 12:58:49

标签: react-native animation lifecycle

我正在处理与React生命周期相关的问题。 问题发生在一个本机应用程序中,该应用程序使用react-navigation-stackreact-navigation-tabs中的动画。

我已经构建了一个自定义的pub-sub事件库,该库正在我的react-native应用程序中使用。我无法发布该库的代码(由于代码长度和商业版权原因),但是我可以为您提供描述。

该库有5种主要方法:

  • publish:创建具有某些规范的新事件(例如一次性事件)
  • subscribe:向事件添加事件监听器功能
  • emit:调用某个事件的所有事件监听器,这些事件是通过订阅添加的(与添加的顺序相同)
  • unsubscribe:从事件中删除事件监听器功能
  • withdraw:删除通过发布创建的事件

事件由事件名称(简单的字符串)引用,并且事件名称在生命周期内是唯一的(如果已经发布了另一个事件,则不能发布事件“ PRESSED”-您可以先撤消现有事件,然后再次发布其他一些“ PRESSED”事件。

事件的生命周期恰好是我列出上述方法的顺序。

事件库不使用react或state,而是位于React范围之外。它在自己的文件中定义和实例化,并且仅导出其自身的单例(const)实例。

我需要它像这样工作,以便将树中的事件发送到某些父组件(父可以调用setState()并以明显的反应方式更改状态-这是所需的效果)。

对于用法,我publishsubscribe分别访问父组件的componentDidMount方法上的事件,emit仅从子组件访问,并且只能从父组件的unsubscribe方法中进行withdrawcomponentWillUnmount的访问。

现在,解决这个问题:

问题是混乱的事件生命周期。当卸载使用动画的本机组件并在上一个动画完成之前重新安装它时,该组件发布的事件将不遵循正确的生命周期-更糟糕的是,在组件重新安装发生后,它们将退订并撤消! / p>

这将导致重新挂载发布失败(因为已经存在使用该名称发布的事件),那么before的componentWillUnmount将取消订阅并撤消事件,然后子组件将无法发出事件,最后,重新安装的组件将无法取消订阅和撤回未发布的事件。

有人对如何解决此问题有任何想法吗? 我试图使事件库的方法异步,然后等待所有事件方法调用,但没有任何更改。我找不到任何反应生命周期方法会有所帮助,而且我不确定如何防止动画破坏事件(库)生命周期...

0 个答案:

没有答案