[英]react-navigation Drawer lock dynamically
如何動態鎖定抽屜? 我有一個來自react-native-modalbox的模態用法。 打開模態時,將其稱為this.refs.modal.open();
並鎖好抽屜。 我只知道drawerLockMode
可以在navigationOptions
設置。 但是模式不是DrawerNavigator
的屏幕
const MainDrawer = DrawerNavigator({
Event: { screen: EventScreen },
Wallet: { screen: WalletScreen},
Profile: { screen: ProfileScreen},
Contact: { screen: MemberContactScreen},
Reward: {
screen: MemberRewardScreen,
navigationOptions:{
drawerLockMode :'locked-closed'
}},
},{
contentComponent: props => <DrawerScreen {...props} />
});
static navigationOptions = ({ navigation }) => ({
drawerLockMode: navigation.state.params ? navigation.state.params.drawerLockMode : undefined});
this.props.navigation.setParams({
drawerLockMode: locked-closed });
您可以在redux的幫助下完成此操作,步驟如下。
步驟1:為抽屜創建減速器,將其標志保持在其狀態,我們將使用該標志動態鎖定抽屜。 步驟2:訂閱抽屜的reducer,然后將“ drawerLockMode”綁定到該標志。 第3步:只需從任何地方調度動作即可鎖定抽屜。
這是代碼
您的抽屜組件
class Drawer extends Component{
constructor(props) {
super(props);
this.state = {drawerLockMode:this.props.drawerLockMode};
}
render() {
const options = {
// initialRouteName: 'LandingPage',
drawerPosition: 'left',
contentComponent: SideMenu,
drawerWidth: Dimensions.get('window').width,
gesturesEnabled: false
};
const Drawer = DrawerNavigator(RouteConfigs, options);
return (
<Drawer
screenProps={{drawerLockMode:this.props.drawerLockMode}}
/>
);
}
}
function mapStatetoProps(state)
{
return {
drawerLockMode:state.draweReducer.drawerLockMode
}
}
export default connect(mapStatetoProps)(Drawer);
export default function reducer(state = {drawerLockMode:'unlocked'}, action) {
switch (action.type) {
case 'DRAWER_LOCK':
return Object.assign({},state,{drawerLockMode:'locked-closed'});
case 'DRAWER_OPEN':
return Object.assign({},state,{drawerLockMode:'unlocked'});
default:
return state
}
}
現在使用
this.props.dispatch({類型: 'DRAWER_OPEN'});
this.props.dispatch({類型: 'DRAWER_CLOSE'}); 動態鎖定抽屜
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.