Я использую useNavigation
крючок React Navigation:
В MyComponent. js:
import { useNavigation } from "@react-navigation/native";
const MyComponent = () => {
const navigation = useNavigation();
const handleNav = () => {
navigation.navigate("about");
};
return(
<TouchableOpacity onPress={handleNav}>
<Text>About</Text>
</TouchableOpacity>
)
}
Есть ли способ перенести эту функцию на пользовательский крючок? Я пробовал следующее:
В использовании CustomNav. js:
import { useNavigation } from "@react-navigation/native";
const useCustomNav = ({ to }) => {
const navigation = useNavigation();
navigation.navigate(to);
return null;
};
export default useCustomNav;
В MyComponent. js:
import useCustomNav from './useCustomNav';
const MyComponent = () => {
const handleNav = () => {
useCustomNav("about");
};
return(
<TouchableOpacity onPress={handleNav}>
<Text>About</Text>
</TouchableOpacity>
)
}
Я получаю ошибку:
Инвариантное нарушение: недопустимый вызов ловушки. Хуки могут быть вызваны только внутри тела функционального компонента.
Я понимаю, что это происходит, поскольку useNavigation
«скрыт» в вызове функции, но не в том, как это исправить.
Причина, по которой я пытаюсь это сделать, - это я » Я делюсь кодом между проектами React Native и React Native Web, но мне нужно сделать маршрутизацию по-разному. Expo может предназначаться для разных платформ с разными именами файлов, например useCustomNav.native.js
для нативных и useCustomNav.web.js
для веб-сайтов. Поэтому мне нужно иметь заменяемую функцию для маршрутизации на разные платформы. Я не могу получить хук useNavigation
в MyComponent
, так как он будет использоваться только для нативного, это будет ошибка для сети.