假设有一个选项卡视图,其中包含名称为面包、比萨饼、饮料、甜点、奶昔的选项卡。这些选项卡的名称是从 API 中获取的。此外,每个选项卡在各自屏幕上显示的信息也是从 API 中获取的。现在,当 Tab 的数据之一从 API 中删除时。我也希望将其从选项卡视图中删除。
如何在 React Navigation 中实现这一点?
假设有一个选项卡视图,其中包含名称为面包、比萨饼、饮料、甜点、奶昔的选项卡。这些选项卡的名称是从 API 中获取的。此外,每个选项卡在各自屏幕上显示的信息也是从 API 中获取的。现在,当 Tab 的数据之一从 API 中删除时。我也希望将其从选项卡视图中删除。
如何在 React Navigation 中实现这一点?
在反应导航中,我们不能有动态选项卡,因为我们必须提前静态定义好所有路由。
我们也有这样的要求,所以我们遵循了下面提到的方法。
const MainNav = createBottomTabNavigator( { Breads: { screen: BreadsStackNavigation }, Pizzas: { screen: PizzasStackNavigation }, Beverages: { screen: BeveragesStackNavigation }, Desserts: { screen: DessertsStackNavigation }, Shakes: { screen: ShakesStackNavigation } }, { initialRouteName: 'HomeStackNavigation', defaultNavigationOptions: { tabBarVisible: false, }, swipeEnabled: false, navigationOptions: { header: props => <HeaderView navigation={props.navigation} />, tabBarVisible: false } } );
componentWillReceiveProps
检查来自服务器的响应并相应地动态创建选项卡(可能是通过根据响应动态添加按钮)。更新
我正在考虑另一种方法。
正如此链接中给出的,我们可以创建自己的自定义导航器,并在从 API 调用获得响应后动态填充父自定义导航器中的选项卡。我没有相同的确切代码,但您可以尝试这种方法。
您可以创建一个将服务器响应映射到 RouteConfigs 的函数,并在 render 方法中调用该函数。
警告。使用这种方法是非常危险的,因为在每次重新渲染时,导航器都会重新生成。如果您可以在创建选项卡后调整 View no 以重新渲染,那么您可以摆脱这种方法。
const mapArrayToTabs = (myArray) =>{
let result = {}
myArray.map( (item,index) =>{
result[item] = {
screen: ()=> <YourComponent/>,
navigationOptions: {...}
}
} )
return result
}
const createCustomTabs =()=>{
const MyTabs = createAppContainer(
createMaterialTopTabNavigator(
mapArrayToTabs(["Screen1", "Screen2"] ),
tabBarOptions: {...}
)
)
return <MyTabs/>
}
render(){
<View>
{this.createCustomTabs()}
</View>
}