开发者问题收集

从子导航器屏幕导航到父导航器的屏幕

2019-11-12
2093

我是 React Native 的新手,我一直在构建一个简单的食物食谱应用。我的主要 Stack Navigator 包含两个屏幕: 底部标签导航器食谱屏幕 。我在 标签导航器 中的 主屏幕 ,当我按下任何食谱时,我想传递食谱道具并导航到主 Stack Navigator 中的 食谱屏幕 。不幸的是,我还没有找到任何解决方案。 你能帮我解决这个问题吗?

这是主文件 App.js

const Navigator = createBottomTabNavigator(
  {
    Home: Home,
    Add: Add,
    Profile: Profile
  }
);

const Stack = createStackNavigator(
  {
    Navigator: Navigator,
    Recipe: Recipe
  },
  {
    headerMode: "none",
    navigationOptions: {
        headerVisible: false,
    }
  }
);

export default createAppContainer(Stack)

这是我的 Home Screen

export default class Home extends Component {
    render() {
        return (
            <SafeAreaView style={styles.container}>
                <View style={styles.header}>
                    <Text style={styles.headerTitle}>Recipes</Text>
                </View>

                <ScrollView style={styles.categoryContainer}>
                    <Category name={"All Foods"} recipes={recipes} />
                    <Category name={"Meat"} recipes={[ recipes[1], recipes[3] ]} />
                    <Category name={"Vegetarian"} recipes={[ recipes[0], recipes[2] ]} />
                    <Category name={"Desserts"} recipes={[ recipes[4] ]} />
                </ScrollView>
            </SafeAreaView>
        )
    }
}

这是 Category

export default class Category extends Component {
    render() {
        return (
            <View style={styles.container}>
                <View style={styles.categoryHeader}>
                    <Text style={styles.categoryHeaderTitle}>{this.props.name}</Text>
                </View>

                <ScrollView >
                    <View style={styles.categoryContent}>
                        <FlatList
                            data={this.props.recipes}
                            renderItem={({ item }) => <Block name={item.name} image={item.image} time={item.time} portions={item.portions} />}
                            keyExtractor={(item, index) => index.toString()}
                            horizontal={true}
                        /> 
                    </View>  
                </ScrollView>
            </View>
        )
    }
}

这是实际的配方块,我想在其中一直导航回到 Recipe screen 并使用 onPress={}code> 函数传递配方道具

export default class Block extends Component {
    render() {
        return (
            <TouchableOpacity style={styles.container} onPress={null} >
                <Image style={styles.image} source={this.props.image} />

                <Text style={styles.title}>{this.props.name}</Text>
                <Text style={styles.info}>{this.props.time} min | portions: {this.props.portions}</Text>
            </TouchableOpacity>
        )
    }
}

谢谢你的所有回答

1个回答

如果您需要 StackNavigatorBottomTabNavigator 顶部显示标题,我建议对 bottomTabBar 的每个子项使用一个 StackNavigator 。这样做的话,您可以在单个 tabBarItem 中拥有更多屏幕,并且其他屏幕上的 bottomTabBar 不会消失。

如果您不介意的话,您可以使用 dangerouslyGetParent 从其子级访问 stackNavigator ,然后使用您需要的道具进行导航。

navigateToRecipe = (recipe) => {
   this.props.navigation.dangerouslyGetParent().navigate("Recipe", { recipe : myRecipe}) //pass an object with the data you need
}

然后,您可以使用 getParam this.props.navigation.getParam("recipe") 或直接使用 this.props.navigation.state.params

访问您的食谱道具
Auticcat
2019-11-12