代码之家  ›  专栏  ›  技术社区  ›  noɥʇʎԀʎzɐɹƆ

JS根视图从其superview中移除后,是否始终从本机接收事件?

  •  4
  • noɥʇʎԀʎzɐɹƆ  · 技术社区  · 6 年前

    我的(高度简化的)代码如下所示:

    // objc
    self.currentSwipeUpView = [[RCTRootView alloc]
       initWithBridge:_bridge moduleName:@"PhotoSwipeUpView"
       initialProperties:nil
    ];
    // elsewhere...
    [self.currentSwipeUpView removeFromSuperview];
    self.currentSwipeUpView = nil;
    
    // js
    function PhotoSwipedUpView() {
        return <TextInput style={{flex: 1}} onChangeText={console.warn} />
    }
    AppRegistry.registerComponent('PhotoSwipeUpView', () => PhotoSwipeUpView)
    

    self.currentSwipeUpView console.warn 和新课文在一起?

    此外,我很好奇当RCTRootView从JS侧的superview中移除时是否可以得到通知。

    我在用ARC,我没有其他的参考资料 自电流开关视图 .

    编辑: 我有两个骑警视图。其中只有一个将被卸载,另一个将在应用程序的整个状态中持续存在。它们使用相同的网桥,因此使用相同的bundle和JS环境。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Jeremy    6 年前

    装载/卸载JS捆绑包

    从父视图中移除根视图后,捆绑包也将卸载。如果根视图被删除并取消引用,则文本更改侦听器也应被删除且不应触发。

    包中的JSX最终用于设置本机元素及其侦听器。JSX基本上就是脚本。有雷诺数的JSX TextInput UITextField . 如果JSX指定了监听器,那么文本更改的本机监听器将添加到本机元素实例中。

    即使加载了两个根视图,它们也将彼此独立操作。如果卸载了一个根视图,则与屏幕上的TextInputs关联的侦听器将不再接收事件。您的第二个根视图应该不受影响,因为它将为TextInput设置单独的侦听器。

    事件/时间问题

    可能的解决方案

    RCTEventEmitter / NativeEventEmitter