Javascript react native:如何将状态传递到嵌套的stackNavigator到tabNavigator
我正在尝试使用Javascript react native:如何将状态传递到嵌套的stackNavigator到tabNavigator,javascript,react-native,Javascript,React Native,我正在尝试使用传递状态从嵌套的堆栈导航器到选项卡导航器 首先,我的App.js导航结构如下所示 App.js //tabNavigator. This is where I want to pass my state. const tabNavigator = createMaterialTopTabNavigator({ tabOne:tabOne, tabTwo: tabTwo, tabThree:tabThree }) //I nested tabNavig
传递状态
从嵌套的堆栈导航器
到选项卡导航器
首先,我的App.js导航结构
如下所示
App.js
//tabNavigator. This is where I want to pass my state.
const tabNavigator = createMaterialTopTabNavigator({
tabOne:tabOne,
tabTwo: tabTwo,
tabThree:tabThree
})
//I nested tabNavigator to this StackNavigator
const StackNavigator = createStackNavigator({
stackAndTab: {
screen: tabNavigator,
navigationOptions: ({ navigation }) => ({
header:
<CustomHeader
navigation={navigation}
/>
,
})
},
}, {
defaultNavigationOptions: {
header: null
}
})
//I have another stackNavigator where I put all my stackNavigators.
const AllStackNavigator = createStackNavigator(
{
InitialScreen:InitialScreen,
StackNavigator:StackNavigator,
},
{
defaultNavigationOptions: {
header: null,
},
},
);
//Finally I nest my StackNavigator to SwitchNavigator
const SwitchNavigator = createSwitchNavigator(
{
AllStackNavigator:AllStackNavigator
},
{
defaultNavigationOptions: {
header: null,
},
},
);
const CombinedNavigator = createAppContainer(StartSwitchNavigator);
export default class App extends React.Component {
render() {
return <CombinedNavigator/>;
}
}
我的问题
如何访问
tabNavigator
中的传递状态newState
(我从initialScreen
传递的状态),其中tabOne
,tabTwo
,tabThree
是嵌套的。我看到了您的问题,感觉您的代码有点混乱。您可以使用此行获取要传递给StackNavigator的参数。
在选项卡屏幕中尝试此代码
this.props.navigation.dangerlyGetParent().getParam('state')
请更正您的onPress
事件
onPress={()=>this.props.navigation.navigate('StackNavigator',{state:this.state.newState})}
我看到了你的问题,我觉得你的代码有点混乱。您可以使用此行获取要传递给StackNavigator的参数。
在选项卡屏幕中尝试此代码
this.props.navigation.dangerlyGetParent().getParam('state')
请更正onPress
事件
onPress={()=>this.props.navigation.navigate('StackNavigator',{state:this.state.newState})}
您想要不带redux的,对吗?请不要带redux。我不打算使用redux。你想在所有选项卡或任何一个选项卡中使用此状态吗?你想不使用redux,对吗?请不要使用redux。我不打算使用redux。你想在所有选项卡或任何一个选项卡中使用此状态吗?谢谢你的回答,它可以工作。但是为什么你认为我的代码有点混乱?这不是嵌套导航器的正确方法吗?我觉得我不能把它简单化。谢谢你的回答,它很有效。但是为什么你认为我的代码有点混乱?这不是嵌套导航器的正确方法吗?我觉得我再简单不过了。
export default class InitialScreen extends React.Component {
constructor(props) {
super(props)
this.state = {
newState:'this is new State'
}
}
render() {
return (
<View style={styles.container}>
<TouchableOpacity
onPress={()=> this.props.navigation.navigate('StackNavigator', {state:'this.state.newState})}
style={{width:'100%', height:110}}>
<Text>pass state</Text>
</TouchableOpacity>
</View>
);
}
}