美文网首页React NativeiOS开发技巧iOS Developer
ReactNative的cmd+r刷新的替代方法

ReactNative的cmd+r刷新的替代方法

作者: Jerry在种草 | 来源:发表于2015-12-26 20:20 被阅读3614次

    使用0.4版本RN框架

    公司采用React Native框架在国内算是比较早的一批,目前用的是0.4.0版本,目前最新是0.17。为什么不更新呢?因为之前使用的过程中,已经对使用中的部分框架底层代码进行修改(赶需求你懂得),导致后来发现要更新的成本比较高,所以就暂且搁置更新的想法,毕竟在快速迭代版本的过程中公司不会给我们时间去重构。

    command + R 飞一般的体验

    那么我目前用的就是0.4.0版本了,在Xcode6.4的时候用起来还没什么问题,用模拟器调试的时候也可以通过command+R正常刷新,这种体验简直爽到哭,试想你刚改完代码就可以立刻(刷新时间不到1s)看效果,虽然这在前端的攻城狮看来没什么,但是面对Xcode的重新编译再运行,这真是彻底拯救iOS程序猿的宝贵时间,一般run一次中大型的App的时间都够你偷偷刷几次微博了吧。就在我十分舒爽的时候,隔壁安卓的同事告诉我Android Studio 2.0也可以实现这种功能,看来这是未来的趋势啊,不知道以后的Xcode xx会不会跟上这个功能。

    升级Xcode7之后的悲剧

    不过就在大家都升级到Xcode7并且普遍反映不能使用command+R之后,我内心是拒绝的……但是没办法,配合统一开发环境。用了一个月的Xcode7,有时候真想爆粗口,等待编译运行的时间就这么愣着,已经克制住不去刷微博刷知乎了,总之每次运行都得等待的这点时间就铁定浪费了。当然这么一来也是有好处的,就是我每次写完代码都会检查一遍再运行,但习惯了之前的体验,对比现在,真是特难受,就好像你住了8k一个月房租的房子,瞬间给你降到1k一个月的租房质量,总是适应不过来。

    替代方法

    为此我看了从0.4-0.17各个版本更新的内容,也在github上查了很多相关的issue,总算让我找到方法了:
    通过ctrl+command+z快捷键可以弹出功能框

    快捷键.png

    或者通过模拟器的顶部菜单栏,Hardware->Shake Gestrue弹出

    弹出后就可以选择想要的功能了!
    最想要的reload就在这!!

    修改底层方法

    当然通过改底层方法也是可以的,底层使用了UIKeyCommand来检测模拟器的输入。

    - (void)bindKeys
    {
      RCTAssertMainThread();
    
      [[NSNotificationCenter defaultCenter] addObserver:self
                                               selector:@selector(reload)
                                                   name:RCTReloadNotification
                                                 object:nil];
    
    #if TARGET_IPHONE_SIMULATOR
      RCTKeyCommands *commands = [RCTKeyCommands sharedInstance];
    
      // reload in current mode
      [commands registerKeyCommandWithInput:@"r"
                              modifierFlags:UIKeyModifierCommand
                                     action:^(__unused UIKeyCommand *command) {
                                        [[NSNotificationCenter defaultCenter] postNotificationName:RCTReloadNotification
                                                                                            object:nil
                                                                                          userInfo:nil];
                                     }];
    
    #endif
    }
    

    官方自定义的方法registerKeyCommandWithInput,其中UIKeyModifierCommand代表了command键,‘r’代表r键。

    如果你也对ReactNative感兴趣,欢迎一起研究。

    相关文章

      网友评论

      • 小如99:感谢Jerry的分享,我这边用最后一种方法修改快捷键发现没效果。
      • Doris_Lee:谢啦~

      本文标题:ReactNative的cmd+r刷新的替代方法

      本文链接:https://www.haomeiwen.com/subject/tekbhttx.html