React Native:如何在 Navigator 的 navigationBar= 中引用当前路线?

Posted

技术标签:

【中文标题】React Native:如何在 Navigator 的 navigationBar= 中引用当前路线?【英文标题】:React Native: How to reference current route in Navigator's navigationBar=?React Native:如何在 Navigator 的 navigationBar= 中引用当前路线? 【发布时间】:2016-07-24 20:39:04 【问题描述】:

根据当前的路线,我正在尝试更改如下样式,但出现错误:“路线未定义”。如何引用当前路由:navigationBar= 中的 route.name?

<Navigator
 configureScene=...
 initialRoute=...
 renderScene=...
navigationBar=<Navigator.NavigationBar style=route.name == 'Home' ? styles.homeNavBar : styles.normalNavBar .../>
/>

更新

这是我目前在index.ios.js 中的设置:

class practice extends Component 
  constructor()
    super()
  

  renderScene(route, navigator)
    return (
        <route.component navigator=navigator ...route.passProps/>
    )
  

  configureScene(route, routeStack) ...

  render() 
    return (
        <Navigator
          configureScene=this.configureScene
          initialRoute=name: 'Login', component: Login
          renderScene=(route, navigator) => this.renderScene(route, navigator)
          style=styles.container
          navigationBar=
            <Navigator.NavigationBar
              style=route.name == 'Home' ? styles.homeNavBar : styles.normalNavBar //This is what I am trying to achieve
              routeMapper=NavigationBarRouteMapper
            />
          
        />
    );
  

更新

class practice_style extends Component

  renderScene(route, navigator)
    this._navigator = navigator

    return (
        <route.component navigator=navigator ...route.passProps/>
    )
  

  configureScene(route, routeStack) ...

  getNav = () => 
    return this._navigator
  

  render() 
    const routes = this.navigator.getCurrentRoutes();
    route = routes[routes.length-1];

    return (
        <Navigator
          configureScene=this.configureScene
          initialRoute=name: 'Home', component: Home
          renderScene=(route, navigator) => this.renderScene(route, navigator)
          style=styles.container
          navigationBar=
            <Navigator.NavigationBar
              style=route.name == 'Home' ? styles.homeNavBar : styles.normalNavBar
              routeMapper=NavigationBarRouteMapper
            />
          
        />
        )
    

【问题讨论】:

【参考方案1】:

它是一个数组,只需将最后一个从堆栈中弹出即可。

var currentRoute = navigator.getCurrentRoutes().pop();

Navigator.getCurrentRoutes 克隆了 routes 数组,所以你不能通过 pop'ing 来破坏它。

【讨论】:

【参考方案2】:

你可以像这样设置导航器的引用

 render () 
   //To access route
   var routeName;
   if(this.navigator) 
      const routes = this.navigator.getCurrentRoutes();
      routeName = routes[routes.length-1].name;
   

   return (
    <Navigator
     configureScene=...
     initialRoute=...
     renderScene=...
     ref=(nav) => this.navigator = nav
     navigationBar=<Navigator.NavigationBar 
       style=routeName == 'Home' ? styles.homeNavBar : styles.normalNavBar .../>
    />
 );

上述函数返回路线数组,该数组中的最后一个元素将是您当前的路线。

希望对您有所帮助。

【讨论】:

很抱歉,但想弄清楚如何让它发挥作用。我如何将它整合到我想要实现的目标中?谢谢! 感谢您的快速响应!我在原始帖子中进行了更新。请看一下。所以我试图在重新渲染时获取route.name,并基于route.name为navigationBar = 显示不同的样式,所以styles.homeNav或styles.normalNavBar。相关的是,我应该将const routes = this.navigator.getCurrentRoutes(); route = routes[routes.length-1]; 放在哪里以及ref 如何帮助实现我的意图?谢谢阿布舍克! 只是检查你是否看到了我之前的评论。请告诉我! 这个const routes = this.navigator.getCurrentRoutes()是访问当前路由。所以你可以访问route.name。你必须在 return(); 之前把它放在渲染函数中 如果它不起作用,您可以在rnplay重新创建它【参考方案3】:

我使用navigator.jumpTo() 在路线中移动,所以navigator.getCurrentRoutes() 返回了我最后一条可用路线,而不是当前路线。

为了获取当前路线,我使用了navigator.navigationContext.currentRoute

【讨论】:

以上是关于React Native:如何在 Navigator 的 navigationBar= 中引用当前路线?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 React Native 中使用 React Native Video 显示多个视频? [关闭]

如何在React Native上创建多个屏幕?

如何在React Native中使用CreateBottomTabNavigator?

如何在 React Native 中的循环中查找

如何在 react-native 中定位移动应用的用户?

React native-如何在 react native 中只显示一次登录屏幕?