React native 如何使用不同的参数加载同一屏幕?

React native 如何使用不同的参数加载同一屏幕?,react-native,react-navigation,React Native,React Navigation,我正在编写一个应用程序,这个应用程序只有一个屏幕和一个抽屉。抽屉有一个类别列表,当我点击其中一个类别时,我想用新的类别参数重新加载屏幕 以下是我如何称呼导航: { this.props.navigation.navigate'Home',{category:category.id}; this.props.navigation.closeDrawer; }} /> 它不工作,但我不知道这是因为我们不能在已经打开的屏幕上调用navigate,还是因为屏幕已经被调用,所以它不会再次触发我的compo

我正在编写一个应用程序,这个应用程序只有一个屏幕和一个抽屉。抽屉有一个类别列表,当我点击其中一个类别时,我想用新的类别参数重新加载屏幕

以下是我如何称呼导航:

{ this.props.navigation.navigate'Home',{category:category.id}; this.props.navigation.closeDrawer; }} /> 它不工作,但我不知道这是因为我们不能在已经打开的屏幕上调用navigate,还是因为屏幕已经被调用,所以它不会再次触发我的componentDidMount

以下是我的componentDidMount以获取内容:

异步组件安装{ const paramcegory=this.props.navigation.getParam'category',0; console.logparamCategory; this.getJokeThis.state.category,1;//类别id+页码 }; 我尝试使用这个.props.navigation.push'Home',{category:category.id};但我犯了一个错误:推送不是一个函数。试图创建一个中间人屏幕,用正确的参数重定向回主页。但它看起来很糟糕,不会触发componentDidMount。我迷路了

解决办法是什么

这是我肮脏的解决办法。它能工作,但我不喜欢它

在我的主屏幕中,我有一个强制重播器:

构造器{ 超级作物; this.forceRerender=this.props.navigation.addListener'willFocus',=>{ this.getJokeThis.props.navigation.getParam'category',0; }; } 组件将卸载{ 这是一种新的方法; } 我创造了一个中间人,他还需要一个重播器,否则它只能工作一次:

类中间人扩展React.Component{ 组件安装{ const paramcegory=this.props.navigation.getParam'category',0; this.props.navigation.navigate'Home',{category:paramcegory}; }; 构造器{ 超级作物; this.forceRerender=this.props.navigation.addListener'willFocus',=>{ const paramcegory=this.props.navigation.getParam'category',0; this.props.navigation.navigate'Home',{category:paramcegory}; }; } 组件将卸载{ 这是一种新的方法; } 渲染{ 回来 } }
我对stacknavigator使用下面的代码,idk,如果它在抽屉导航器中工作,那么您应该试试

var Stack= createStackNavigator(
  {
    Main: {screen: ({ navigation }) => (<MainScreen navigation={navigation} value="Dogs" />)},
    Search:{screen: ({ navigation }) => (<Search navigation={navigation} value="Dogs" />)},
 Details:{screen: ({ navigation }) => (<Details navigation={navigation} value="Dogs" />)}
  },
  {
      // initialRouteName: 'Main',
    headerMode: 'none',

  }
);

在另一个堆栈中,我有一个与猫,但屏幕相同。我只是用这个.props.value来访问这个值,如果它在抽屉导航器中工作,那么我将使用下面的方法用于stacknavigator,idk,但是您应该尝试一下

var Stack= createStackNavigator(
  {
    Main: {screen: ({ navigation }) => (<MainScreen navigation={navigation} value="Dogs" />)},
    Search:{screen: ({ navigation }) => (<Search navigation={navigation} value="Dogs" />)},
 Details:{screen: ({ navigation }) => (<Details navigation={navigation} value="Dogs" />)}
  },
  {
      // initialRouteName: 'Main',
    headerMode: 'none',

  }
);

在另一个堆栈中,我有一个与猫,但屏幕相同。我只是用这个.props.value来访问值,我将使用您的用户配置文件示例作为基础,因为它更直接

DroperNavigator无法堆叠屏幕。因此,您需要将屏幕包装在stackNavigator中。请注意,必须使用this.props.navigation.push才能将下一个屏幕添加到堆栈中


我将使用您的用户配置文件示例作为基础,因为它更直接

DroperNavigator无法堆叠屏幕。因此,您需要将屏幕包装在stackNavigator中。请注意,必须使用this.props.navigation.push才能将下一个屏幕添加到堆栈中


我会使用nativebase抽屉切换react导航,并简单地使用onPress呈现类别,以将活动类别设置为状态。@Zayco,是的,对于这个项目,我可以。但我也对未来项目的解决方案感兴趣。例如,您在一个用户profile上,单击另一个用户,我也会遇到同样的问题。我添加了一个答案,可以解释使用用户配置文件的概念。例如,我将使用nativebase drawer切换react导航,只需使用onPress呈现类别,即可将活动类别设置为状态。@Zayco,是的,这个项目我可以。但我也对未来项目的解决方案感兴趣。例如,您在一个用户配置文件上,单击另一个用户,我也会遇到同样的问题。我添加了一个答案,以用户配置文件为例,解释了这个概念。您没有将链接放入抽屉中:推送不起作用抽屉中不存在该功能。要实现您所描述的,我真的认为最好的解决方案是使用像nativebase这样的普通UI库。以同样的例子来看@Zayco,是否可以[{label:'标题',子项:[{label:'子标题',子项:[{label:'第3级1'},{label:'第3级2',子项:[{label:'第4级'}]}]}]}]传递每个页面中的子数组?。。你能帮我一下吗?你没有把链接放在抽屉里:推送不起作用,抽屉里没有功能。要实现您所描述的,我真的认为最好的解决方案是使用像nativebase这样的普通UI库。看一看@Zayco,同样的例子是i 无法[{label:'标题',子项:[{label:'子标题',子项:[{label:'第3级1'},{label:'第3级2',子项:[{label:'第4级'}]}]}]在每一页?中传递子数组?。。你能帮帮我吗