【发布时间】:2021-07-27 18:15:26
【问题描述】:
我想归档一个动态选项卡(可以打开和关闭),并且能够像在任何浏览器中一样查看选项卡概览。知道从哪里开始吗?
【问题讨论】:
标签: reactjs react-native react-native-navigation
我想归档一个动态选项卡(可以打开和关闭),并且能够像在任何浏览器中一样查看选项卡概览。知道从哪里开始吗?
【问题讨论】:
标签: reactjs react-native react-native-navigation
count of Navigator Tabs 和state 和jsx 进行控制。//tabs state
const [tabs, setTabs] = React.useState(
[
{
name : "tab-1",
component : TabScreen,
},
{
name : "tab-2",
component : TabScreen,
}
]
)
//render
<Tab.Navigator>
{
tabs.map(tab => <Tab.Screen name={tab.name} component={tab.component} />)
}
</Tab.Navigator>
const addNewTab = () => {
setTabs(tabs => [
...tabs,
{
name : "tab-" + (parseInt(tabs.pop().name.replace("tab-", "")) + 1),
component : TabScreen,
}
])
}
const remove = (route) => {
setTabs(tabs => tabs.filter(tab => tab.name !== route.name))
}
react context 或redux 在它们之间共享状态。这里只是一个简单的例子,你可以从它开始。在这里试试snack。
import * as React from 'react';
import { Text, View } from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { createMaterialTopTabNavigator } from '@react-navigation/material-top-tabs';
const Tab = createMaterialTopTabNavigator();
export default function App() {
const [tabs, setTabs] = React.useState([
{
name : "tab-1",
component : TabScreen,
}
])
const addNewTab = () => {
setTabs(tabs => [
...tabs,
{
name : "tab-" + (parseInt(tabs.pop().name.replace("tab-", "")) + 1),
component : TabScreen,
}
])
}
const remove = (route) => {
setTabs(tabs => tabs.filter(tab => tab.name !== route.name))
}
function TabScreen({route}) {
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text onPress={addNewTab}>Add New Tab</Text>
{
route.name !== "tab-1" && <Text onPress={() => remove(route)}>close me</Text>
}
</View>
);
}
return (
<NavigationContainer>
<Tab.Navigator>
{
tabs.map(tab => <Tab.Screen key={tab.name} name={tab.name} component={tab.component} />)
}
</Tab.Navigator>
</NavigationContainer>
);
}
【讨论】:
React Native 中不同屏幕的不同标签栏:
import * as React from 'react';
import { Text, View } from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
function HomeScreen() {
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text>Home!</Text>
</View>
);
}
function SettingsScreen() {
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text>Settings!</Text>
</View>
);
}
const Tab = createBottomTabNavigator();
export default function App() {
return (
<NavigationContainer>
<Tab.Navigator>
<Tab.Screen name="Home" component={HomeScreen} />
<Tab.Screen name="Settings" component={SettingsScreen} />
</Tab.Navigator>
</NavigationContainer>
);
}
它只是帮助您为不同的屏幕设置不同的选项卡。
如果没有帮助,请告诉我。
【讨论】: