所以,我有这样的层次结构:
MyList
---> MyListNav
MyList
是一个包含我的东西列表的屏幕;
MyListNav
StackNavigator
被Modal
包裹,以便在按下Add New Stuff
屏幕上的MyList
按钮时弹出一个小窗口。
作为StackNavigator
,MyListNav
有两个屏幕:
export default class Test extends Component {
constructor(props){
super(props)
this.state = {
isVisible: false
}
FVN = StackNavigator({
Find: {screen: Find},
Add: {screen: Add},
},{
mode: 'card',
headerMode: 'none',
cardStyle: {
opacity: 1,
backgroundColor: 'transparent',
},
// ...some transitioning configurations
})
}
render() {
return(
<Modal
isVisible={this.props.isVisible} avoidKeyboard>
<TouchableWithoutFeedback onPress={Keyboard.dismiss} accessible={false}>
<View style={styles.modal}>
<FVN screenProps = {{isVisible: false}}/>
</View>
</TouchableWithoutFeedback>
</Modal>
)
}
我知道这不是一种常见的做法,但我需要这样做,因为这是我在模态中导航的唯一方法,而我正在为iPad做这个。
对于Find
和Add
,他们都有一个自定义CLOSE
按钮来关闭MyListNav
模式。
现在的问题是,我知道如何将参数从MyListNav
(子)传递给MyList
(父),并使用MyList
中的状态来控制{MyListNav
的可见性1}}。但我无法找到将道具或状态Find
或Add
传递给MyListNav
的方法。或者说,我找不到将CLOSE
按钮按到MyListNav
的方法,正如我所尝试的那样,似乎是Find
/ Add
之间的关系并且MyListNav
不是子节点和父节点,因此不能使用回调函数来执行此操作。
这有什么常规解决方案吗?或者我在某个地方弄错了?
答案 0 :(得分:0)
react-navigation
有点受限。
如果您未使用redux
,则您的选项相当有限。
您可以做的是通过您已在此处执行的screenProps
将导航初始化的组件中的道具传递到您的屏幕:<FVN screenProps = {{isVisible: false}}/>
。
在Find
和Add
屏幕中,您还应该能够看到/访问isVisible
道具。
所以你可以这样做:
<FVN screenProps = {
{
isVisible: false,
findProps: {},
addProps: {}
}
}/>
希望这有帮助