zoukankan      html  css  js  c++  java
  • react-navigation遇到的坑

    关于goBack返回指定页面

    react-navigation是提供了goBack()到指定页面的方法的,那就是在goBack()中添加一个参数,但当你使用goBack('Main')的时候,你会发现并没有跳转,原因是react-navigation默认goBack()中的参数是系统随机分配的key,而不是手动设置的routeName,而方法内部又没有提供可以获得key的方法,所以这里只能通过修改源码将key换成routeName了。
    下面的内容直接引用了hello老文的内容

    把项目/node_modules/react-navigation/src/routers/StackRouter.js文件里的 
    const backRoute = state.routes.find((route: *) => route.key === action.key); 
    改成 const backRoute = state.routes.find(route => route.routeName === action.key);
    但不是很完美, 这里的component要填想返回的组件的前一个组件的routeName, 比如你的栈里顺序是home1, home2, home3, home4, 在home4里要返回home2, 使用this.props.navigation.goBack('home3');; 并且又会带出一个问题: goBack()方法没反应了, 必须加个null进去, 写成goBack(null)...
    

    关于goBack返回指定页面的修改完善版

    if (action.type === NavigationActions.BACK) {
        let backRouteIndex = null;
        if (action.key) {
    
          const backRoute = state.routes.find(
            /* $FlowFixMe */
            /* 修改源码 */
            route => route.routeName === action.key
            /* (route: *) => route.key === action.key */
          );
          /* $FlowFixMe */
          console.log('backRoute =====',backRoute);
          backRouteIndex = state.routes.indexOf(backRoute);
          console.log('backRoute =====',backRouteIndex);
        }
        if (backRouteIndex == null) {
          return StateUtils.pop(state);
        }
        if (backRouteIndex >= 0) {
          return {
            ...state,
            routes: state.routes.slice(0, backRouteIndex+1),
            index: backRouteIndex - 1 + 1,
          };
        }
      }
  • 相关阅读:
    ES6语法记录
    关于Vue中 render: h => h(App) 的具体含义的理解
    在Vue中结合render函数渲染指定组件
    访问者模式(Visitor)_java实现
    自底向上集成 Bottom-Up
    基于功能集成 Function-Based
    分层集成(线性关系) Layers
    持续集成(高频集成、每日集成) Continuous/High-frequency
    Selenium实现点击click()
    Selenium自动化之点击下拉框选项操作
  • 原文地址:https://www.cnblogs.com/cosyer/p/9047914.html
Copyright © 2011-2022 走看看