Пользовательское меню навигатора в React Native

Я новичок в React Native, и у меня есть проект с своего рода меню с правой стороны (5 кнопок) на нескольких экранах. Я хочу использовать это меню только один раз для всего приложения с контейнером и изменить содержимое контейнера в соответствии с выбранной кнопкой, как в Android с фрагментом и fragmentManager.replace ...

Экраны и меню разработаны, но я действительно не знаю, как все правильно смешать.

Я читал документ о реакции-навигации (https://reactnavigation.org/docs/en/custom-navigators.html), но не все хорошо понимаю. Однако мне просто нужен своего рода TabNavigator с настраиваемой вкладкой на стороне езды.

Пожалуйста помогите.

Умерло ли 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 без написания...
0
0
1 356
2

Ответы 2

Не уверен, что вы имеете в виду, но я думаю, вы могли бы попробовать что-то вроде этого:

const CustomDrawer = createDrawerNavigator({
  Screen1: {
    screen: Screen1,
  },
  Screen2: {
    screen: Screen2,
  },
})

const RootNavigator = createStackNavigator({
  MainScreen: {
    screen: MainScreen,
  },
  CustomDrawer: { screen: CustomDrawer }
},
{
  initialRouteName: 'Init',
})

В принципе, вы можете создать ящик справа / слева. И добавьте на него свои 5 экранов, затем вы будете использовать ящик для навигации между этими экранами. Кроме того, вы создадите экземпляр своего ящика в stackNavigator, который будет обрабатывать навигацию. Вы также можете установить на нем свой главный экран и все остальное.

Я думаю, вам нужен ящик в собственном приложении для реагирования с использованием реагирующей навигации.

используйте createDrawerNavigator, он предлагает вам индивидуальный дизайн боковой панели

createDrawerNavigator({
    screen: {..your screen stack here...}
}, {
  headerMode: 'none',
  gesturesEnabled: false,
  contentComponent: DrawerContainer, /// DrawerContainer is custom component container for all tabs
  drawerBackgroundColor: 'transparent',
  drawerWidth: 240,
  useNativeAnimations: true
});

DrawerContainer .js: ---

export default class DrawerContainer extends React.Component { 
 render() {
    return ( 
         <View style = {{flex:1}}>
            <TouchableOpacity
              style = {{borderBottomColor: '#fff', height: 40}}
              onPress = {() => this.props.navigation.navigate('screen name')}
            >
              <Text style = {{color: '#FFFFFF',fontSize: 18}} 
               type='h5White'>your tab name</Text>
            </TouchableOpacity> 
         </View> 
   ); 
 } 

}

подробнее см. https://medium.freecodecamp.org/how-to-build-a-nested-drawer-menu-with-react-native-a1c2fdcab6c9

перейти к этому среднему руководству https://medium.com/@mehulmistri/drawer-navigation-with-custom-side-menu-react-native-fbd5680060ba

создать настраиваемую боковую панель всегда фиксировано: --- Не используйте ящик. Я делаю это, используя hoc (компоненты высшего порядка) Кулак создает компоненты высшего порядка как sidebar.js

    import React, { Component } from 'react';
import {
  StyleSheet,
  Text,
  View,
  TouchableOpacity
} from 'react-native';


const withSidebar = WrappedComponent => class extends Component {

     constructor(props) {
        super(props);
        this.state = { isConnected: true };
     }

      render() {
        return (
            <View style = {styles.container}>
                 <View style = {{width:50, top:20, backgroundColor: 'grey',}}>
                    <TouchableOpacity
                        style = {styles.menu}
                        onPress = {() => console.info('code')}
                    >
                        <Text style = {styles.menuText} type='h5White'>first</Text>
                    </TouchableOpacity>
                    <TouchableOpacity
                        style = {styles.menu}
                        onPress = {() => console.info('code')}
                    >
                        <Text style = {styles.menuText} type='h5White'>second</Text>
                    </TouchableOpacity>
                </View>
                <View style = {{flex:1, backgroundColor: 'red', top:20}}>
                    <WrappedComponent {...this.props} /> 
                </View>

            </View>
         );
      }
}; 


const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#F5FCFF',
    flexDirection: 'row',
  },
  welcome: {
    flex: 1,
    margin: 20,
    backgroundColor: 'orange',
    margin: 10,
    textAlign: 'center',
    fontSize: 20,
    paddingTop: 70,
  },
  menu: {
        paddingHorizontal: 7,
        borderBottomWidth: 1,
        borderBottomColor: '#fff',
        height: 40,
        justifyContent: 'center'
    },
    menuText: {
        justifyContent: 'center',
        color: '#FFFFFF',
        fontSize: 10,
        fontWeight: 'bold'
    },
});

export default withSidebar;

Теперь подключите свой экран только к этому hoc: --

import sidebar.js in your screen as
import withSidebar from 'sidebar'

export default connect(mapStateToProps, mapDispatchToProps)(withSidebar(yourScreenName));

Этот HOC доступен для каждого экрана, на котором вы хотите просто использовать синтаксис, указанный выше. Вы также можете поместить его в компонент корневого уровня только один раз, чтобы получить его для всех компонентов (как вы это реализуете).

Спасибо за помощь. Это почти так, я могу реализовать ящик справа, пусть он всегда виден, но проблема в том, что над экраном остается фон с низкой непрозрачностью из-за открытого ящика. К сожалению, я не нашел для этого решения.

Turvy 21.11.2018 15:38

Вы хотите, чтобы боковая панель всегда была видна для каждого экрана, такая же тонкая, как правая сторона с некоторыми вкладками, чем не используйте ящик, сделайте его настраиваемым. Если я прав, дайте мне знать, я могу помочь

Anoop Rajta 22.11.2018 08:03

Ты прав. Теперь я решил создать представление, которое содержит панель навигации и мою боковую панель, но я не могу правильно разместить боковую панель. Я имею в виду, что я сделал flex 1 и justifyContent: "flex-end", но он взял полный размер и избегал щелчка по другому виду, кроме бокового меню. Если у вас уже есть пример, похожий на мою попытку, это может быть хорошо

Turvy 22.11.2018 10:47

Я отредактировал свой код. Надеюсь, вы получите ответ, реализовав приведенный выше код. Сделай это и дай мне знать

Anoop Rajta 23.11.2018 06:55

Спасибо за помощь, попробую ваше решение. Мне просто нужно хорошо понимать, как работают HOC.

Turvy 23.11.2018 14:00

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