P粉7887656792023-08-18 14:54:31
你想做的更适合于单页面应用程序架构,其中你有一个单一的主容器,根据导航来持有变化的内容,然而,React Navigation是设计用于堆叠屏幕并在它们之间导航的。
你可以创建一个自定义的导航组件,我们称之为NavigationContainer
,它持有变化的内容,这个组件将管理当前显示的页面并相应地渲染内容,类似于这样:
const NavigationContainer = () => { const [currentPage, setCurrentPage] = useState('Home'); // 默认页面 const navigateTo = (page) => { setCurrentPage(page); }; const renderContent = () => { switch (currentPage) { case 'Home': return <HomeContent />; case 'Profile': return <ProfileContent />; // 添加更多不同页面的情况 default: return null; } }; return ( <View style={{ flex: 1 }}> <CustomNavBar navigateTo={navigateTo} /> {renderContent()} </View> ); }; export default NavigationContainer;
CustomNavBar
是另一个包含每个页面按钮或链接的组件。
当按下按钮/链接时,它将调用navigateTo
函数,该函数从其父组件即NavigationContainer
接收为props,以更新那里的currentPage
状态:
const CustomNavBar = ({ navigateTo }) => { return ( <View> <TouchableOpacity onPress={() => navigateTo('Home')}> <Text>Home</Text> </TouchableOpacity> <TouchableOpacity onPress={() => navigateTo('Profile')}> <Text>Profile</Text> </TouchableOpacity> // 添加更多按钮/链接以供其他页面使用 </View> ); }; export default CustomNavBar;
你应该实现深链接以实现更好的基于URL的导航,这将允许用户使用URL直接导航到特定页面,此外,如果需要的话,你需要手动处理路由、动画和过渡。
你可能还会失去一些由React Navigation等库提供的内置导航功能。