gpt4 book ai didi

reactjs - 使用 React Navigation (React Native) 进行条件路由

转载 作者:行者123 更新时间:2023-12-03 14:19:11 26 4
gpt4 key购买 nike

构建一个 React Native 应用程序,我会根据初始选择屏幕的状态将用户发送到下一个屏幕。因此,如果选择了 1 个项目,它应该将用户带到单一屏幕。如果超过 1,则多重屏幕。

如您所见,我制作了自定义 headerLeft 和 headerRight 组件。我更愿意保持这种方式的路由,但以某种方式将初始状态添加到此上下文中。有办法吗?

如果我能以某种方式将导航选项与 paths.js 文件分离并将它们放入 Screen 组件本身,那就太棒了。但根据我的研究,navigationOptions 似乎不能直接访问状态。

这是相关代码(routes.js):

export default StackNavigator(
{
Select: {
screen: Select,
navigationOptions: ({ navigation }) => ({
headerLeft: <View />,
headerRight: (
<HeaderRight
navigation={navigation}
destination=""
showIcon
/>
)
})
},
Single: {
screen: Single,
navigationOptions: ({ navigation }) => ({
headerLeft: (
<HeaderLeft navigation={navigation} destination="back" showIcon />
),
headerRight: (
<HeaderRight navigation={navigation} destination="SingleSecond" />
)
})
},
Multiple: {
screen: Multiple,
navigationOptions: ({ navigation }) => ({
headerLeft: <HeaderLeft navigation={navigation} destination="back" />,
headerRight: (
<HeaderRight navigation={navigation} destination="MultipleSecond" />
)
})
},
},
{
headerMode: "float",
navigationOptions: ({ navigation }) => ({
title: `${navigation.state.routeName}`,
headerStyle: { backgroundColor: "#000" },
headerTitleStyle: {
color: "#fff",
textAlign: "center",
alignSelf: "center"
}
})
}
);

最佳答案

您可以从组件设置参数,这些参数可以从导航选项访问。

this.props.navigation.setParams({ selectionState: "single" });
this.props.navigation.setParams({ selectionState: "multiple" });

您可以从导航选项访问参数,例如

static navigationOptions = ({navigation}) => {
let selected = navigation.state.params && navigation.state.params.selectionState;
return {
headerRight: ...
};
}

我希望这能满足您的需求,您需要在组件中选择某些内容后设置参数。还有另一种方法可以动态设置初始状态。

function getNavigation (selected = "single") {
return StackNavigator({
...,
{ initialState = selected === "single" ? "Single" : "Multiple" }
})
}

然后使用所选参数调用此方法以重置屏幕。

关于reactjs - 使用 React Navigation (React Native) 进行条件路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48804342/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com