【问题标题】:How to change Header title in navigationOptions from constructor in react-native app?如何从 react-native 应用程序中的构造函数更改 navigationOptions 中的标题标题?
【发布时间】:2018-06-19 06:45:19
【问题描述】:

在我的 react-native 项目中,我使用 DrawerNavigator 导航到 SwitchAccount 页面。在 SwitchAccount 页面中,我使用了 react-native-tabs 中的选项卡。下面是我使用的代码

    render() {
      return (
     <View style={[styles.container]}>
      // Here _renderTab function return component based on selectedService
      {this._renderTab(this.state.selectedService)} 
      <TabBarContainer
          selectedService={this.state.selectedService}
          onTabChange={this._switchService}
        />
     </View>
    ); 
  }

当我点击选项卡时,它会改变状态,然后我得到 _renderTab 函数返回的新组件。一切正常,但我想根据 _renderTab 函数返回的组件更改标题标题。 我该怎么办?有什么方法可以从构造函数更改标题标题? 下面是我在 SwitchAccount 页面中的 navigationOptions 代码。我想从构造函数中更改标题。

    static navigationOptions = {
    title:'Filter',
    drawerLabel: 'Switch Account',
    drawerIcon: ({ tintColor }) => (
      <Icon
        name='md-switch'
        size={40}
        color='black'
      />
    ),
  };

【问题讨论】:

    标签: reactjs react-native react-native-tabnavigator react-native-drawer react-native-tab-view


    【解决方案1】:

    一种方法是使用导航paramsnavigationOptions 可以定义为一个函数(而不是一个对象),它接收一个包含 navigation 对象本身作为其键之一的对象:

    static navigationOptions = ({navigation}) => ({ /* ... */ })
    

    这允许您通过从navigation 对象中读取参数来动态设置标题:

    static navigationOptions = ({navigation}) => ({
        title: navigation.getParam('title', 'DefaultTitle'),
        /* ... */
    })
    

    然后,您可以在其中一个组件中调用 setParams 对象上的 setParams 函数来设置标题:

    handleChangeTab = (tab) => {
        /* Your tab switching logic goes here */
    
        this.props.navigation.setParams({
            title: getTitleForTab(tab)
        })
    } 
    

    请注意,组件必须由 react-navigation 挂载才能访问 navigation 属性,否则您必须从其父级传递它或使用 withNavigation HoC 来包装组件并让它从那里接收道具。

    也就是说,您是否考虑过使用Tab navigation

    【讨论】:

    • 谢谢@juandemarco。先生,您的解决方案 100% 有效。
    • 很高兴能帮上忙! :)
    • 嘿@juandemarco 我已经在使用静态navigationOptions = ({navigation}) => ({ /* ... */ }) 但它没有改变标题,我想改变基于标题在我传递的参数上,``` static navigationOptions = ({ navigation }) => { return { title: navigation.getParam('providerName'), }; } render() { return ( {console.log("@name", this.props.navigation.getParam('providerName'))} // 我可以在这里得到名字 ); }
    猜你喜欢
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 2017-08-08
    相关资源
    最近更新 更多