Навигация с помощью UseNavigation () - PullRequest
0 голосов
/ 23 января 2020

У меня возникли проблемы с пониманием использования UseNavigation. Я не смог найти много хороших примеров. У меня есть один пример, когда первая кнопка ведет нас на страницу регистрации, но я не уверен, как именно. Я пытаюсь отредактировать его так, чтобы вторая кнопка перенесла меня на страницу входа. Это моя домашняя страница:

import Login from './login/Login'

type HomeScreenProps = {};

export const HomeScreen = observer<HomeScreenProps>(() => {
  const navigation = useNavigation();
  const appStore = useAppStore();

  return (
    <View style={styles.page}>
      <View style={styles.container}>
        <Hello />
        <Button onPress={() => appStore.hello()}>
          <Text>Change State</Text>
        </Button>
        <Text>The state can also be here: </Text>
        <Text>{appStore.helloWorld}</Text>
        {/* */}
        <Button
          onPress={() => navigation.navigate('Registration')}>
          <Text>Press to register</Text>
        </Button>
        <Button
          //onPress={() => navigation.navigate('Login')}
          >
          <Text>Login</Text>
        </Button>
      </View>
    </View>
  );
});

Вот архитектура моей страницы входа:

import React, { Component } from 'react';
import { Container, Header, Left, Body, Right, Button, Title, Text, Form, Item, Input, Label} from 'native-base';
import { StackNavigator } from 'react-navigation';
import { createStackNavigator } from 'react-navigation-stack';
import { DrawerNavigator } from "react-navigation";
import { createAppContainer } from 'react-navigation';

export class Login extends Component {
  constructor(props) {
    super(props);

    this.state = {
      username: '',
      password: '',
    };
  }
  render() {
    return (
      <Container>
      <Text >Instaride</Text>
      <Form>
            <Item floatingLabel>
              <Label onChangeText={(text) => this.setState({username: text})}>Username</Label>
              <Input 
              value={this.state.username}
          onChangeText={username => this.setState({ username })}
          placeholder={'Username'}
          />
            </Item>
            <Item floatingLabel last>
              <Label >Password</Label>
              <Input 
              value={this.state.password}
          onChangeText={password => this.setState({ password })}
          placeholder={'Password'}
          secureTextEntry={true}
          />
            </Item>
          </Form>
          <Left>
            <Button onPress={() => this.props.navigation.navigate("Details")}>
              <Text>Login</Text>
            </Button>
            <Text >Forgot Password?</Text>
          </Left>
          <Right>
            <Button hasText transparent>
              <Text>Sign Up Here</Text>
            </Button>
          </Right>
      </Container>
    );
  }
}
class DetailsScreen extends React.Component {
  render() {
    return (
        <Text>Details Screen</Text>
    );
  }
}

class RegisterationScreen extends React.Component {
  render() {
    return (

        <Text>sign up time</Text>
    );
  }
}

const LoginRouter = createStackNavigator(
  {
    Home: { screen: Login },
    Details: { screen: DetailsScreen },       
  }
)

export default createAppContainer(LoginRouter);

, но выдает ошибку. Как я могу это изменить? Почему метод работает на странице регистрации, а не на странице входа в систему?

Это из файла App.tsx:

onst App: React.FC<AppProps> = () => {
  // Disable mapbox telemetry due to privacy policy
  useEffect(() => {
    MapboxGL.setTelemetryEnabled(false);
  });

  return (
    <NavigationNativeContainer>
      <NavigationStack.Navigator initialRouteName="Home">
        <NavigationStack.Screen
          name="Home"
          component={HomeScreen}
          options={{ headerShown: false }}
        />
        <NavigationStack.Screen
          name="Registration"
          component={RegistrationScreen}
          options={{ headerShown: false }}
        />
        {/* <NavigationStack.Screen
          name="Login"
          component={LoginScreen}
          options={{ headerShown: false }}
        /> */}
        <NavigationStack.Screen name="Details" component={DetailsScreen} />
      </NavigationStack.Navigator>
    </NavigationNativeContainer>
  );
};

Я получаю сообщение об ошибке, что «Логин» не найден когда я раскомментирую этот раздел.

...