Ящик React Native React-Navigation не открывается

Я использую реактивную навигацию в качестве навигационного пакета для моего собственного приложения. а также установили и настроили 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,

Любая помощь приветствуется, заранее спасибо

Не могли бы вы подробнее рассказать о предполагаемой структуре навигации? Почему у них обоих есть ключ Home?

cltsang 13.06.2019 11:46
Умерло ли Create-React-App?
Умерло ли Create-React-App?
В этом документальном фильме React.dev мы исследуем, мертв ли Create React App (CRA) и какое будущее ждет этот популярный фреймворк React.
Освоение React Native: Пошаговое руководство для начинающих
Освоение React Native: Пошаговое руководство для начинающих
React Native - это популярный фреймворк с открытым исходным кодом, используемый для разработки мобильных приложений. Он был разработан компанией...
В чем разница между react native и react ?
В чем разница между react native и react ?
React и React Native - два популярных фреймворка для создания пользовательских интерфейсов, но они предназначены для разных платформ. React - это...
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
Хуки React: что это такое и как их использовать
Хуки React: что это такое и как их использовать
Хуки React - это мощная функция библиотеки React, которая позволяет разработчикам использовать состояние и другие возможности React без написания...
1
1
2 103
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Попробуйте обернуть всю навигацию по стеку с навигацией 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() вообще ниоткуда, проблема не в том, что я не могу получить к нему доступ, он просто перестает работать через некоторое время

Naveed Sheriffdeen 10.06.2019 10:13

можете проверить это пожалуйста stackoverflow.com/questions/58605603/…

Oliver D 29.10.2019 11:44

Я думаю, вы можете использовать другой простой способ справиться с этой проблемой:

Вы можете использовать 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>
    )
  }
}

Это работает для меня хорошо, я надеюсь, что это работает и для вас.

С наилучшими пожеланиями .

Другие вопросы по теме