Почему мой реагирующий компонент не отображается?

#reactjs #react-native #react-navigation

#reactjs #реагирующий компонент #реагирование-навигация

Вопрос:

Итак, для контекста я проделал большую работу с React, но что касается React Native, у меня очень мало опыта. Я пытаюсь создать приложение, которое использует навигацию React для перехода со страницы на страницу. Это также ново для меня, но я читал, что это хорошо для собственных приложений.

Это настройка навигатора стека. Каждый компонент — это просто простая функция, возвращающая его имя в текстовом теге, который находится внутри тега представления.

 return (
  <View>
    <Text>Component</Text>
  </View>
)
 

Это App.js с помощью навигатора стека

 import 'react-native-gesture-handler';
import React from 'react';
import { ScrollView } from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';

import Main from './src/components/main';
import Nav from './src/components/nav';
import Home from './src/pages/home';
import Group from './src/pages/group.js';
import Profile from './src/pages/profile';
import Calendar from './src/pages/calendar';
import Event from './src/pages/event';
import CreateEvent from './src/pages/create-event';
import CreateGroup from './src/pages/create-group';
import JoinGroup from './src/pages/join-group';

const Stack = createStackNavigator();

export default function App() {
  return (
    <ScrollView style={{ flex: 1 }}>
      <NavigationContainer>
        <Stack.Navigator>
          <Stack.Screen name="Home" component={Home} />
          <Stack.Screen name="Group" component={Group} />
          <Stack.Screen name="Profile" component={Profile} />
          <Stack.Screen name="Calendar" component={Calendar} />
          <Stack.Screen name="Event" component={Event} />
          <Stack.Screen name="Create Event" component={CreateEvent} />
          <Stack.Screen name="Create Group" component={CreateGroup} />
          <Stack.Screen name="Join Group" component={JoinGroup} />
        </Stack.Navigator>
      </NavigationContainer>
    </ScrollView>
  )
}
 

По умолчанию используется домашняя страница, чего я и хочу. Тем не менее, я попытался реализовать кнопку, которая при нажатии будет переходить на другую страницу («группа»). Кнопка не отображается. Текст не отображается, если я реализую текстовый тег. Компонент определенно импортируется правильно, поскольку показанный журнал консоли выводится на консоль.

 import React from 'react';
export default function Home(props) {
  return (
    <View style={{ flex: 1 }}>
      <Button style={{flex: 1, width: 200, height: 200, backgroundColor: 'black'}} title="Group" onPress={() => props.navigation.navigate('Group')}/>
    </View>
  )
}
 

Вот как выглядит домашняя страница при загрузке приложения.
Домашняя страница

Я много раз пытался разобраться в этом. Я нашел несколько источников, предлагающих попробовать {flex: 1} для стилизации, но это не исправило ситуацию. Я пытался использовать заглавные буквы как в имени файла, так и в компоненте, без изменений.

Комментарии:

1. На какой консольный журнал вы ссылаетесь, который что-то подтверждает? Показываемый Home вами компонент, который отображает только кнопку, не соответствует снимку экрана вашей домашней страницы. Вы уверены, что используете свой последний код?

Ответ №1:

NavigationContainer не должен находиться внутри ScrollView, вы должны поместить scrollview в компоненты ваших страниц, такие как Home, Profile Calender

 export default function App() {
  return (

      <NavigationContainer>
        <Stack.Navigator>
          <Stack.Screen name="Home" component={Home} />
          <Stack.Screen name="Group" component={Group} />
          <Stack.Screen name="Profile" component={Profile} />
          <Stack.Screen name="Calendar" component={Calendar} />
          <Stack.Screen name="Event" component={Event} />
          <Stack.Screen name="Create Event" component={CreateEvent} />
          <Stack.Screen name="Create Group" component={CreateGroup} />
          <Stack.Screen name="Join Group" component={JoinGroup} />
        </Stack.Navigator>
      </NavigationContainer>
  )
}
 

и домашний компонент

 import React from 'react';
export default function Home(props) {
  return (
<ScrollView style={{flex:1}}>
    <View style={{ flex: 1 }}>
      <Button style={{flex: 1, width: 200, height: 200, backgroundColor: 'black'}} title="Group" onPress={() => props.navigation.navigate('Group')}/>
    </View>
</ScrollView>
  )
}