【问题标题】:How a proper RNN V2 structure looks like?一个合适的 RNN V2 结构是什么样的?
【发布时间】:2018-10-12 16:02:43
【问题描述】:

我一直在尝试制作一个合适的 RNN V2 树,但它对我来说没有意义......鉴于这个例子:

      root: {
            bottomTabs: {
                children: [
                    {
                        component: {
                            name: 'Main',
                            options: {
                                bottomTab: {
                                    text: 'Main',
                                },
                            },
                        },
                    },
                    {
                        component: {
                            name: 'Secondary',
                            options: {
                                bottomTab: {
                                    text: 'Secondary',
                                },
                            },
                        },
                    },
                ],
            },
        },
    }

假设我想告诉导航器对活动底部选项卡使用红色。如果我想实现这一点,那么我需要将 selectedTextColor 添加到 EACH COMPONENT

...component: {
   ...
   options: {
       ...
       selectedTextColor: 'red'
   }
}

与bottomTabs 可见、隐藏等相同... 如何在父项中设置一次,让子项继承这些选项?

【问题讨论】:

  • 这不是一个真正的答案,但我建议使用 react-navigation,API 更简单,您可以将 activeColors 传递给导航堆栈而不是单个组件reactnavigation.org

标签: react-native react-native-navigation react-native-navigation-v2


【解决方案1】:

每个BottomTab的选项都是自下而上解析的,因此bottomTab选项只能定义一次。

让我们看一个稍微复杂一点的布局,取自 Playground 应用:

Navigation.setRoot({
  root: {
    bottomTabs: {
      id: 'BottomTabs',
      children: [
        {
          stack: {
            id: 'TAB1_ID',
            children: [
              {
                component: {
                  name: 'navigation.playground.TextScreen',
                  passProps: {
                    text: 'This is tab 1',
                    myFunction: () => 'Hello from a function!'
                  },
                  options: {
                    topBar: {
                      visible: true,
                      animate: false,
                      title: {
                        text: 'React Native Navigation!'
                      }
                    },
                  }
                }
              }
            ],
            options: {
              topBar: {
                visible: false
              },
              bottomTab: {
                text: 'Tab 1',
                icon: require('../images/one.png'),
                selectedIcon: require('../images/one.png'),
                testID: testIDs.FIRST_TAB_BAR_BUTTON
              }
            }
          }
        },
        {
          stack: {
            children: [
              {
                component: {
                  name: 'navigation.playground.TextScreen',
                  passProps: {
                    text: 'This is tab 2'
                  }
                }
              }
            ],
            options: {
              bottomTab: {
                text: 'Tab 2',
                icon: require('../images/two.png'),
                testID: testIDs.SECOND_TAB_BAR_BUTTON
              }
            }
          }
        },
        {
          component: {
            name: 'navigation.playground.TextScreen',
            passProps: {
              text: 'This is tab 3',
              myFunction: () => 'Hello from a function!'
            },
            options: {
              topBar: {
                visible: true,
                animate: false
              },
              bottomTab: {
                text: 'Tab 3',
                icon: require('../images/one.png'),
                selectedIcon: require('../images/one.png')
              }
            }
          }
        }
      ],
      options: {
        bottomTabs: {
          titleDisplayMode: 'alwaysShow',
          testID: testIDs.BOTTOM_TABS_ELEMENT
        }
      }
    }
  }
});

如您所见,BottomTab 选项可以在堆栈选项或组件选项中声明。 这是因为从当前布局树中为每个选项卡解析选项。 重要的是要记住选项是自下而上解决的,这意味着更深的选项(离根更远的声明)优先于更高的选项(更靠近根的声明)。

让我们仔细看看 BottomTab 的第一个孩子。在这种情况下,它是一个 stack,它声明了 bottomTab 选项。推送到此堆栈的任何子级都可以覆盖堆栈的 bottomTab 选项,因为它在布局树中更深 - 堆栈的选项可以被视为默认选项。

【讨论】:

  • 哦,它是如何工作的!这让事情变得更加清晰:) 有没有办法合并子选项中的选项,而不是覆盖它?
  • 好吧,你可以调用Navigation.mergeOptions()来合并(更新)一个组件选项。
  • 我的意思是在你创建“静态”结构的时候
  • @guy.gc 如果我想隐藏 android 和 ios 的按钮文本标签,我们应该怎么做?尝试使用titleDisplayMode: 'alwaysHide' for android 和iconInsets: { top: 0, left: 0, bottom: 0, right: 0 } for ios 但似乎不起作用。我们还需要做些什么吗?
  • 只是不要为标签设置标题。 BottomTab 项只能使用图标。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-12
  • 2019-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多