gpt4 book ai didi

reactjs - 获取react导航中tab导航器的当前事件屏幕路由

转载 作者:行者123 更新时间:2023-12-02 09:08:33 27 4
gpt4 key购买 nike

这是我使用 react navigation v3.2.1 的导航堆栈:

  • 我有一个切换导航器可以切换到身份验证导航堆栈和经过身份验证的应用程序堆栈。
  • 应用程序堆栈是使用底部选项卡导航器制作的。
  • 我想为选项卡导航器使用自定义组件。

  • 使用 createBottomTabNavigator 时如何获取选项卡导航器的当前路由名称和定制 tabBarComponent .

    例如:
  • 假设标签导航堆栈有 2 个导航屏幕,即主页和聊天。
  • 在自定义 BottomBar 中,如何检查焦点/事件/当前路由名称是否为 Home/Chat,以便我可以分别更改图标的样式?

  • 应用容器.js
    const switchStack = createSwitchNavigator({
    AuthLoading: AuthLoadingScreen,
    App: AppStack,
    Auth: AuthStack
    }, {
    initialRouteName: 'AuthLoading',
    })

    export default createAppContainer(switchStack)

    AppStack.js
    const AppStack = createBottomTabNavigator({
    Home: {
    screen: HomeStack,
    },
    Chat: {
    screen: ChatStack
    },
    }, {
    initialRouteName: 'Home',
    activeColor: '#f0edf6',
    inactiveColor: '#3e2465',
    shifting: false,
    barStyle: {
    backgroundColor: '#694fad',
    },
    labeled: false,
    tabBarComponent: ({navigation}) => <BottomBar navigation={navigation}/>
    })

    export default AppStack

    底部栏.js
    export default class BottomBar extends React.Component {
    constructor(props) {
    super(props)
    }

    render() {
    return (
    <View style={styles.container}>
    <IconComponent routeName={'Home'}/>
    <IconComponent routeName={'Chat'}/>
    </View>
    )
    }
    }

    图标组件.js
    export default class IconComponent extends React.Component {
    constructor(props) {
    super(props)
    }

    ...

    render() {
    let IconComponent
    let iconName
    let iconSize = 25
    switch (this.props.routeName) {
    case 'Home':
    IconComponent = MaterialCommunityIcons
    // iconName = `home${focused ? '' : '-outline'}`;
    iconName = `home`;
    break
    case 'Chat':
    IconComponent = AntDesign
    iconName = `message1`
    iconSize = 22
    break
    }

    let tintColor = 'green'

    // if focused Home is current tab screen then change style eg. tint color.
    // similary if current tab screen is Chat, then change style.

    return (
    <Animated.View
    style={[
    styles.container,
    {
    opacity: this.opacity
    }
    ]}
    >
    <IconComponent name={iconName} size={iconSize} color={tintColor}/>
    </Animated.View>
    )
    }
    }

    最佳答案

    自定义 BottomBar 的导航对象有一个索引,用于保存当前事件屏幕索引

    tabBarComponent: ({navigation}) => <BottomBar navigation={navigation}/>

    navigation.state.index

    如果主屏幕处于事件状态>> navigation.state.index 将为 0
    如果聊天屏幕处于事件状态>> navigation.state.index 将是 1 ...等

    关于reactjs - 获取react导航中tab导航器的当前事件屏幕路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55198988/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com