NavigatorIOS - 是否有viewDidAppear或viewWillAppear等效?

时间:2015-04-14 05:20:27

标签: react-native

我正在努力将应用程序移植到React-Native来测试它。当我回到导航器堆栈中的上一个视图(点击后退按钮)时,我想运行一些代码。是否有viewWillAppear方法?我在导航器上看到有一个“onDidFocus()”回调,听起来它可能是正确的东西......但是在NavigatorIOS上似乎没有那样的东西

6 个答案:

答案 0 :(得分:13)

我找到了一种在UIKit中模拟viewDidAppear和viewDidDisappear的方法,
但我不确定这是否是一种“正确”的方式。

componentDidMount: function() {
    // your code here

    var currentRoute = this.props.navigator.navigationContext.currentRoute;
    this.props.navigator.navigationContext.addListener('didfocus', (event) => {
        //didfocus emit in componentDidMount
        if (currentRoute === event.data.route) {
            console.log("me didAppear");
        } else {
            console.log("me didDisappear, other didAppear");
        }
        console.log(event.data.route);
     });
}, 

答案 1 :(得分:2)

对于使用钩子并使用5.x导航版本的用户,我认为您可以这样做以期望viewDidAppear出现类似行为:

  import React, {useCallback } from "react";
  import { useFocusEffect } from "@react-navigation/native";

  const SomeComponent = () => {
      useFocusEffect(
        useCallback(() => {
          //View did appear
        }, [])
      );
      //Other codes
  }

有关更多信息,请参见https://reactnavigation.org/docs/use-focus-effect/

答案 2 :(得分:0)

以下是使用最新的React Navigation版本模拟viewDidAppear的解决方案:

componentDidMount() {
     var currentRoute = this.props.navigation.state.routeName;
     this.props.navigation.addListener('didFocus', (event) => {

         if (currentRoute === event.state.routeName) {
             // VIEW DID APPEAR
         }
     });
}

感谢吴智超的想法:)

答案 3 :(得分:0)

如果您使用的是 React Navigation,请使用:

    componentDidMount(){
        this.props.navigation.addListener('focus', () => {
            // put your code here
        });
    }

基本上,您是在首次安装组件时添加 focus 事件。每当(也包括第一次)组件聚焦时,它将被调用。理想情况下,您还需要通过捕获 addListener 调用返回的值并调用该返回值(实际上是取消订阅函数)来移除卸载时的侦听器。

答案 4 :(得分:-1)

我已创建了一个包含onLeftButtonPress的自定义按钮,以按照https://github.com/facebook/react-native/issues/26处理后退运行代码

  

解决这个问题的方法是在左侧设置自定义后退按钮,或在iOS中实现 - viewWillDisappear:

答案 5 :(得分:-3)

您可以使用ComponentWillMount,或者如果您要离开视图,可以使用ComponentWillUnmount,它将在退出时运行一些代码。