返回

利用react-navigation锦囊妙计,一招解决实际问题

前端


为了进一步完善react-navigation的日常使用体验,本文将对过去积累的一些问题及解决方法进行一个总结归纳。

react-navigation是一个遵循先进后出原则的栈,每打开一个新的screen,该screen就会位于页面最顶层。初始化TabNavigator的时候,TabNavigator上的所有screen都会被保存至stack中。本文提供的一些简单而实用的技巧,能够帮助大家快速掌握react-navigation。

巧用jumpTo轻松跳转到指定screen


以下演示的是如何使用jumpTo从一个screen快速跳转到另一个screen,同时pop掉中间的screen:

// 将名为Route1的screen从堆栈中清除,并跳转到Route2
this.props.navigation.jumpTo('Route2', {});

轻松实现模态screen的跳转


以下展示了如何实现模态screen的跳转:

// 打开一个叫做Modal的screen,当用户点击Modal的右上角的关闭按钮或遮罩层,Modal会自动关闭并返回到之前的screen
this.props.navigation.navigate('Modal', {});

返回栈底的指定screen


以下为回到栈底的指定screen的方法:

// 返回名为Route1的screen
this.props.navigation.popToTop('Route1');

useFocusEffect的完美应用


以下说明了如何使用useFocusEffect监听screen是否处于focus状态:

import React, { useEffect } from 'react';

const Screen1 = () => {
  useEffect(() => {
    const onFocus = () => {
      // 当screen处于focus状态时执行某些操作
    };

    const onBlur = () => {
      // 当screen处于blur状态时执行某些操作
    };

    // 监听screen的focus和blur事件
    const unsubscribe = this.props.navigation.addListener('focus', onFocus);
    const unsubscribe = this.props.navigation.addListener('blur', onBlur);

    // 在组件卸载时取消监听
    return () => {
      unsubscribe();
    };
  }, []);

  return <div>Screen1</div>;
};

export default Screen1;