zoukankan      html  css  js  c++  java
  • 解决 react-native 嵌套路由 warning

    本文地址:https://www.cnblogs.com/veinyin/p/13455113.html

    关于嵌套路由报 warning 的问题,官方文档其实在常见问题中已经给出了解决方法,查看这里

    但是是 class component 的写法

    export default class App extends React.Component {
      render() {
        /* In the root component we are rendering the app navigator */
        return <AppContainer />;
      }
    }
    ​
    const AuthenticationNavigator = createStackNavigator({
      SignIn: SignInScreen,
      ForgotPassword: ForgotPasswordScreen,
    });
    ​
    class AuthenticationScreen extends React.Component {
      static router = AuthenticationNavigator.router;
    ​
      render() {
        return <AuthenticationNavigator navigation={this.props.navigation} />;
      }
    }
    ​
    const AppNavigator = createSwitchNavigator({
      Auth: AuthenticationScreen, // This screen renders a navigator!
      Home: HomeScreen,
    });
    ​
    const AppContainer = createAppContainer(AppNavigator);

    那么 function component 如何实现呢,如下图所示

    打开APP后,先展示欢迎页,再进入主页面 home,home里定义了底部的四个 tab导航

    路由嵌套如下

    在导航文件中定义 welcome 页和 home 页切换的导航,在 home 页定义底部导航

    当然,home 中不能在创建导航之后,直接使用 createAppContainer 包一层之后渲染,这样会出现路由嵌套的警告

    Home.js 中这样写就可以了

    // 预设导航,定义了底部四个 tab 导航,有点长就不展示了
    const TABS = {
        Popular: {...},
        Trending: {...},
        ...
    }
    
    const DynamicNavigator = () => {
        // 从预设导航中选出要渲染的
        const { Popular, Trending } = TABS
        // 把要渲染的组装成新的对象,用作 createBottomTabNavigator 的第一个参数
        const tabs = { Popular, Trending }
        return createBottomTabNavigator(tabs)
    }
    
    
    const DynamicNav = DynamicNavigator()
    
    const Home = (props) => {
        return <DynamicNav navigation={props.navigation} />
    }
    Home.router = DynamicNav.router    

    当然,最好的实现是将 DynamicNavigator 单独拎到一个文件中

    DynamicNavigator.js

    // 预设导航,定义了底部四个 tab 导航,有点长就不展示了
    const TABS = {
        Popular: {...},
        Trending: {...},
        ...
    }
    
    const DynamicNavigator = () => {
        // 从预设导航中选出要渲染的
        const { Popular, Trending } = TABS
        // 把要渲染的组装成新的对象,用作 createBottomTabNavigator 的第一个参数
        const tabs = { Popular, Trending }
        return createBottomTabNavigator(tabs)
    }
    
    // 注意,一定要导出 DynamicNavigator 执行的结果,而不是这个函数!
    export default DynamicNavigator()

    Home.js

    import DynamicNav from '../navigator/DynamicNav'
    
    const Home = (props) => {
        return <DynamicNav navigation={props.navigation} />
    }
    Home.router = DynamicNav.router    

    效果

     最后,有没有好心人能告诉我 RN 的代码在博客园的编辑器里怎么高亮...

    
    
    
  • 相关阅读:
    客户端与服务器持续同步解析(轮询,comet,WebSocket)
    JQuery批量上传插件Uploadify使用详解及参数说明
    win7下安装配置tomcat,java运行环境
    我在Facebook工作的十大经验分享
    jquery submit方法在IE6下的诡异bug
    小练一下canvas版简单时钟与css3版漂亮时钟
    全面解析jquery实现回车键提交表单
    IE8页面加载速度测试
    微软发布Visual Studio 2008 SP1
    开发人员为什么要支持非IE浏览器的四个故事
  • 原文地址:https://www.cnblogs.com/veinyin/p/13455113.html
Copyright © 2011-2022 走看看