Как вернуться на родительскую страницу из пользовательского компонента в React Native

#react-native #react-navigation

Вопрос:

Приветствую всех, я пишу собственное приложение React и наткнулся на кое-что интересное.

Это упрощенная версия моего кода:

 //import statements
...

const Profile = (props) => {
    return(
       <Text>Hey {props.name}!</Text>
       <TouchableOpacity onPress={() => navigation.goBack();}>Go back</TouchableOpacity>
);}

export function ScreenOne({ navigation }) {
    <Profile name="HUFF">
}
export function ScreenTwo({ navigation }) {
    //blah blah blah
}

export default function App(){
    //rest of the code
    ...
}
 

Итак, в основном я пытаюсь использовать react-навигацию для навигации между экранами моего приложения. Но кнопка внутри моего Profile компонента не работает.

Учтите, что я перехожу от ScreenTwo к ScreenOne

заранее спасибо.

Ответ №1:

Для этого вам, возможно, придется указать navigation с помощью реквизитов в Profile теге JSX, чтобы он мог получить доступ к родительским navigation элементам внутри компонента. Например.:

 //import statements
...

const Profile = (props) => {
    return(
       <Text>Hey {props.name}!</Text>
       <TouchableOpacity onPress={() => props.navigation.goBack()}>Go back</TouchableOpacity>
    );
}

function ScreenOne({ navigation }) {
   <Profile name="HUFF" navigation={navigation}>
}

function ScreenTwo({ navigation }) {
    //blah blah blah
}

export default function App(){
    //rest of the code
    ...
}
 

Ответ №2:

Навигация по реакции имеет useNavigation крюк

 import { useNavigation } from '@react-navigation/native'
// if you are not using react-navigation 5 or 6
// then there is package https://github.com/react-navigation/hooks

const Profile = (props) => {
    const navigation = useNavigation();
    return(
       <Text>Hey {props.name}!</Text>
       <TouchableOpacity onPress={() => navigation.goBack()}>Go back</TouchableOpacity>
    );
}