【问题标题】:Pass props to a nested Tabnavigator将道具传递给嵌套的 Tabnavigator
【发布时间】:2018-03-12 05:40:47
【问题描述】:

我现在使用 react native 已经 3 个月了,我现在已经有几天这个问题没有任何解决方案。

问题: 我在 StackNavigator 中有一个嵌套的 TabNavigator。这两个导航器都在一个无状态组件中:

const MyStackNav = StackNavigator({
  Tabs:{
    screen: TabNavigator({
        Tab1: { screen: TabScreen1},
        Tab2: { screen: TabScreen2},
        Tab3: { screen: TabScreen3},
        ...(CONDITION ? { Tab4: {
          screen: TabScreen4
        }} : {})
      })
    }
  StackScreen1:{
    screen: StackScreenOne,
  },
  StackScreen2:{
    screen: StackScreenTwo,
  },
})

组件的调用:

class MainApp extends React.Component {

  constructor(props)
  {
    super(props);

    this.state = {
      condition: false,
    };
  }

  render() {
    return (
      <MyStackNav/>
    );
  }
}

如何将我的类MainApp 中的条件传递给MyNavStack 组件内的条件变量以进行条件渲染? 所以 Tab4 只有在 CONDITION 为 true 时才会被渲染。

第二个问题是: 例如,如何将班级 MainApp 中的道具传递到第一个选项卡屏幕?

提前致谢!

【问题讨论】:

  • 即使我也有同样的问题,你解决了吗?
  • 没有。我更改了布局,以便条件渲染发生在选项卡内部,而不是选项卡本身......这不是我真正想要的,但它目前正在工作。但是这个问题仍然在我的 TODO-List 上......对不起

标签: reactjs react-native react-navigation tabnavigator stack-navigator


【解决方案1】:

你可以给你MyStackNav这样的属性:&lt;MyStackNav condition={this.state.condition} /&gt;

MyStackNav 你可以说:

const MyStackNav = props => StackNavigator({
  Tabs:{
    screen: TabNavigator({
        Tab1: { screen: TabScreen1},
        Tab2: { screen: TabScreen2},
        Tab3: { screen: TabScreen3},
        ...(props.condition? { Tab4: {
          screen: TabScreen4
        }} : {})
      })
    }
  StackScreen1:{
    screen: StackScreenOne,
  },
  StackScreen2:{
    screen: StackScreenTwo,
  },
})

您无需创建React.component 来传递道具。

如果你想在你的组件中做更多的事情,你也可以稍微扩展一下:

 const MyStackNav = (props) => {
         const { condition } = props;
         return StackNavigator({
             Tabs: {
                 screen: TabNavigator({
                     Tab1: {
                         screen: TabScreen1
                     },
                     Tab2: {
                         screen: TabScreen2
                     },
                     Tab3: {
                         screen: TabScreen3
                     },
                     ...(condition ? {
                         Tab4: {
                             screen: TabScreen4
                         }
                     } : {})
                 })
             }
             StackScreen1: {
                 screen: StackScreenOne,
             },
             StackScreen2: {
                 screen: StackScreenTwo,
             },
         })
}

【讨论】:

  • 我已经尝试过这种方式,但我总是收到以下错误消息:“MyNavStack(...): A valid React element (or null) must be returned. You may have returned undefined ,数组或其他一些无效对象。”此错误消息的根源在 mountComponent 中!
  • 尝试将StackNavigator 包裹在例如&lt;span&gt;。所以:&lt;span&gt;{StackNavigator(/* stuff */)}&lt;/ span&gt;
  • 所以目前我收到以下错误消息:“期望一个组件类,得到 [object Object]”。我发现的唯一解决方案是类必须以大写字母开头,我的就是这样......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-20
  • 2018-02-26
  • 2021-12-07
  • 2021-07-12
  • 1970-01-01
  • 2020-08-25
  • 2017-10-03
相关资源
最近更新 更多