6 navigation react-native react-navigation react-hooks
我想知道当前的路由名称,但在导航 js 文件中,我在任何组件中使用 useRoute 挂钩并且工作良好,但是当我在 navigation.js 中使用 useRoute 时出现此错误
错误:找不到路线对象。您的组件是否位于导航器屏幕内?
navigation.js 代码示例,
export default function Navigation() {
const route = useRoute(); // show error >> Error: Couldn't find a route object. Is your component inside a screen in a navigator?
return (
<Stack.Navigator
screenOptions={{
headerShown: false,
}}>
<Stack.Screen name="HomeScreen" component={HomeScreen} />
</Stack.Navigator>
);
}
Run Code Online (Sandbox Code Playgroud)
当我删除 useRoute 时,错误消失了,但我需要使用 useRoute 或任何其他方式来获取 navigation.js 文件中的当前路由名称。
Dav*_*olz 11
您可以将 传递navigationContainerRef给NavigationContainer组件Navigation以使该navigation对象可访问。
考虑以下代码片段。
import { createNavigationContainerRef } from "@react-navigation/native"
export const navigationRef = createNavigationContainerRef()
const App = () => {
return <NavigationContainer
ref={navigationRef}>
<Navigation navigation={navigationRef} />
</NavigationContainer>
}
export default App
Run Code Online (Sandbox Code Playgroud)
然后,里面Navigation。
export default function Navigation({ navigation }) {
const route = navigation.current?.getCurrentRoute()
return (
<Stack.Navigator
screenOptions={{
headerShown: false,
}}>
<Stack.Screen name="HomeScreen" component={HomeScreen} />
</Stack.Navigator>
);
}
Run Code Online (Sandbox Code Playgroud)
然后使用 访问当前路线名称route?.name。
编辑:正如 jhon antoy 在评论中正确指出的那样,如果我们导航到不同的屏幕,这不会更新当前的路线状态。我们需要自己更新它,如下所示。
export const navigationRef = createNavigationContainerRef();
const App = () => {
const [routeName, setRouteName] = useState();
return (
<NavigationContainer
ref={navigationRef}
onReady={() => {
setRouteName(navigationRef.getCurrentRoute().name)
}}
onStateChange={async () => {
const previousRouteName = routeName;
const currentRouteName = navigationRef.getCurrentRoute().name;
console.log("route", currentRouteName)
setRouteName(currentRouteName);
}}
>
<Navigation routeName={routeName} />
</NavigationContainer>
);
}
export default App;
Run Code Online (Sandbox Code Playgroud)
里面Navigation。
export function Navigation(props) {
const route = props.routeName
console.log(props)
return (
<Stack.Navigator
screenOptions={{
headerShown: false,
}}>
<Stack.Screen name="HomeScreen" component={HomeScreen} />
</Stack.Navigator>
);
}
Run Code Online (Sandbox Code Playgroud)
我用一些简单的导航按钮做了一份小吃。
| 归档时间: |
|
| 查看次数: |
11417 次 |
| 最近记录: |