【问题标题】:How to create dynamic tabs in React Navigation v3如何在 React Navigation v3 中创建动态选项卡
【发布时间】:2019-01-23 18:11:49
【问题描述】:

我用应用容器包装了堆栈导航器:

const AppNavigator = createStackNavigator({
  Home: {
    screen: Home,
  },
});

export default createAppContainer(AppNavigator);

主页应该有动态标签。我想从后端加载一些信息,然后生成标签。

这是我的 Home 组件:

class Home extends Component {
  get tabs() {
    return {
      Main: { screen: Demo },
      World: { screen: Demo },
    };
  }

  get tabOptions() {
    return {
      // options...
    };
  }

  render() {
    const Tabs = createMaterialTopTabNavigator(this.tabs, this.tabOptions);
    return <Tabs />;
  }
}

在这种情况下,我收到此错误:

但如果我用 createAppContainer 包装...

const Tabs = createAppContainer(createMaterialTopTabNavigator(this.tabs, this.tabOptions));

...然后我收到有关应用程序中多个容器的警告。

那么如何正确的制作动态标签呢?


UPD 1. 我现在使用的获取标签的真实代码,带有黄色警告。

get tabs() {
  const { categories } = this.props;
  return reduce((acc, item) => assoc(prop('name', item), Demo, acc), {})(categories); // ramda
}

【问题讨论】:

    标签: reactjs react-native react-navigation expo


    【解决方案1】:

    显示该错误是因为将导航器包装为组件是反模式,因为导航道具正在以这种方式被破坏。

    相反,不要使用类,使用普通函数,否则你会像其他尝试使用组件的人一样挣扎

    function tabs(){
       return {
          Main: { screen: Demo },
          World: { screen: Demo },
        }
      }
    
      function tabOptions(){
        return {
          // options...
        };
      }
    
      export default createMaterialTopTabNavigator(tabs(), tabOptions())
    

    【讨论】:

    • 但是我将如何在内部使用 redux 来生成选项卡(您的示例中的 tabs() 函数)。例如,我对它们进行了硬编码。实际上,它将对象数组转换为反应导航友好的对象。
    • ;-;我在 redux 上有点菜鸟,如果我理解正确,它会用于存储。但是,他们将在下一版本的反应导航中放弃对它的支持,所以我建议不要依赖它。
    • 哦,对于您的方法,您可以通过这种方式使用组件导航器 reactnavigation.org/docs/en/with-navigation.html 解决方法,您只需将行 const Tabs = createMaterialTopTabNavigator(this.tabs, this.tabOptions); 替换为 const Tabs = withNavigation(createMaterialTopTabNavigator(this.tabs, this.tabOptions)); ,但是有些时候 withnavigation 没有不适合我
    • 我认为我的选择是采用 react-native-tab-view 并使用它进行创建,因为反应导航无法处理它。
    • 是的,React 导航并不是设计成动态的,它是超级静态的,它可以有他的好处和问题
    猜你喜欢
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多