使用 react-navigation 重构 - 使用分支时如何提升静态导航标题?

Posted

技术标签:

【中文标题】使用 react-navigation 重构 - 使用分支时如何提升静态导航标题?【英文标题】:Recompose with react-navigation - how to hoist static navigation header when using branch? 【发布时间】:2019-08-29 18:33:50 【问题描述】:

我使用以下设置 react-navigation 标头选项。 该组件使用各种 HOC 组件进行增强,然后使用 Recompose 来分支渲染逻辑。

当通过 renderWhileNoAuth 渲染 AuthCallToAction 时,标头选项不会被提升。理想情况下,我希望在显示逻辑的 renderWhileNoAuth 分支时没有标题。

class ProfileScreen extends Component 
  static navigationOptions = 
    title: 'Profile',
    headerRight: (
      <Button
        onPress=() => alert('This is a button!')
        title="Logout"
        type="clear"
      />
    ),
  

  render() 
      <View><Text>Profile</Text></View>
  


const renderWhileNoAuth = () => branch(
  props => !props.authQuery.auth.status,
  renderComponent(() => (
    <AuthCallToAction
      icon="smiley"
      title="Come on now..."
      text="Of course you need to login to see your profile!"
    />
  )),
)

const enhancedComonent = compose(
  graphql(CACHE_AUTH_QUERY, 
    name: 'authQuery',
  ),
  renderWhileNoAuth(),
)

export default hoistStatics(enhancedComponent)(ProfileScreen)

组件 - AuthCallToActionScreen

标题:即使我使用提升静态,null 也不起作用

class AuthCallToActionScreen extends Component 
  static navigationOptions = 
    header: null,
  

  render() 
    return <View><Text>Auth Call To Action - No Header required</Text></View>
  


export default withNavigation(AuthCallToActionScreen)

那么问题是,我如何从 AuthCallToAction 提升 navigationOptions,还是我想错了?

【问题讨论】:

【参考方案1】:

我遇到了同样的问题。我还没有彻底测试它,但看起来静态类属性没有用 compose 函数正确处理。

我找到的一个解决方案是在导航器函数中定义navigationOptions,例如

const AppStack = createStackNavigator(
  navigationOptions: 
    title: 'App Title',
  ,
  screen: AppScreen,
)

您还可以将带有签名(navigation) =&gt; () 的函数传递给navigationOptions 以访问导航属性。

【讨论】:

以上是关于使用 react-navigation 重构 - 使用分支时如何提升静态导航标题?的主要内容,如果未能解决你的问题,请参考以下文章

我需要下载 react-navigation 并使用命令 npm i @react-navigation/native 并显示错误

使用 react-navigation 更改状态栏颜色

使用`react-navigation`导航时如何触发render()方法?

React-Native中导航组件react-navigation的使用

使用 react-navigation 时不发送 redux 状态

测试套件无法使用 @react-navigation/stack 运行