Я использую реактивную навигацию в качестве навигационного пакета для моего собственного приложения. а также установили и настроили react-native-gesture-handler
вместе с react-navigation
, как указано в документации.
Проблема, с которой я столкнулся, заключается в том, что ящик не открывается в случайное время. в основном это происходит, когда пользователь проходит через навигацию по основному стеку и возвращается домой, чтобы открыть ящик. в остальном ящик работает без проблем.
вот как я настроил свою навигацию,
НАВИГАЦИЯ ПО ОСНОВНОМУ СТЕКУ
const AppStack = createStackNavigator(
{
DrawerNav: DrawerNav,
Home: Home,
Notification: Notification,
HomeSearch: HomeSearch
}
НАВИГАЦИЯ ПО ЯЩИКУ
const MyDrawerNavigator = createDrawerNavigator(
{
Home: Home,
MyAccount: MyAccount,
ContactUs: ContactUs,
InviteFriend: InviteFriend,
Terms: Terms,
SignOut: SignOut
},
И MAIN STACK также содержит несколько TAB STACK, Я хочу знать, почему ящик не отвечает.
Код, который я использовал, чтобы открыть ящик, был
this.props.navigation.openDrawer();
но приведенный выше код дал
this.props.navigation.openDrawer() undefined
когда когда-либо происходит вышеупомянутый сбой, о котором я упоминал
как исправление, которое я использовал,
import { DrawerActions } from "react-navigation";
this.props.navigation.dispatch(DrawerActions.openDrawer())
приведенный выше код также перестает работать после того, как пользователь несколько раз просматривает навигацию STACK, но не выдает никаких ошибок при разработке.
Эта ошибка возникает как при производстве, так и при разработке
в настоящее время работает реагировать родной: 0.59.8 реагировать: 16.8.3 реагировать на навигацию: 3.9.1, реакция-родной-жест-обработчик: 1.1.0,
Любая помощь приветствуется, заранее спасибо
Попробуйте обернуть всю навигацию по стеку с навигацией Drawer.
const StackNav = createStackNavigator({
Home: Home,
Notification: Notification,
HomeSearch: HomeSearch
}
Теперь оберните все вышеперечисленное с помощью Drawer navigation.
const AppStack = createDrawerNavigator({
StackNav: {
screen: StackNav,
navigationOptions: {
drawerLabel: <Hidden />,
},
},
Home: Home,
MyAccount: MyAccount,
ContactUs: ContactUs,
InviteFriend: InviteFriend,
Terms: Terms,
SignOut: SignOut
});
Теперь StackNav будет отображаться в ящике как один из экранов. Поэтому создайте класс и верните null, а затем передайте его метке Drawer.
class Hidden extends Component {
render() {
return null;
}
}
Теперь вы сможете вызывать метод this.props.navigation.openDrawer(); в любом месте приложения. Дайте мне знать, если это работает.
я попробовал это, и я не мог получить доступ к openDrawer()
вообще ниоткуда, проблема не в том, что я не могу получить к нему доступ, он просто перестает работать через некоторое время
можете проверить это пожалуйста stackoverflow.com/questions/58605603/…
Я думаю, вы можете использовать другой простой способ справиться с этой проблемой:
Вы можете использовать react-native-drawer
, который доступен в эта ссылка, теперь я покажу вам, как вы можете с ним работать:
const AppStack = createStackNavigator(
{
Home: Home,
Notification: Notification,
HomeSearch: HomeSearch
}
const MyHomeNavigator = createStackNavigator(
{
Home: Home,
MyAccount: MyAccount,
ContactUs: ContactUs,
InviteFriend: InviteFriend,
Terms: Terms,
SignOut: SignOut
},
Теперь давайте предположим, что это ваша домашняя страница:
import Drawer from 'react-native-drawer'
import DrawerComponent from '../components/drawer'
export default class HomePage extends Component{
render() {
return (
<Drawer ref = {(ref) => this._drawer = ref} content = {<DrawerComponent {...this.props}/>} side='right' captureGestures openDrawerOffset = {0.3} acceptTap>
//your home page components
</Drawer>
)
}
}
как видите, вы можете получить доступ к ящику с помощью this._drawer
, и здесь я покажу вам, как <DrawerComponent>
нравится:
export default class DrawerComponent extends React.Component {
navigateTo = (path) => {
this.props.navigation.navigate(path)
}
render(){
return(
<View>
<View>
<Item path='MyAccount' navigate = {this.navigateTo}/>
<Item path='ContactUs' navigate = {this.navigateTo}/>
<Item path='InviteFriend' navigate = {this.navigateTo}/>
//And you add all the item you need here with navigateTo function
</View>
<View>
//LogOut Section
</View>
</View>
)
}
}
Это работает для меня хорошо, я надеюсь, что это работает и для вас.
С наилучшими пожеланиями .
Не могли бы вы подробнее рассказать о предполагаемой структуре навигации? Почему у них обоих есть ключ Home?